@Jeff Scott Brown 已经正确解释了Groovy封闭方式。我要在此解释SPOCK测试DSL细节,因为他似乎对它们不了解:
1 * object.statusrepository.save(...)
意味着要验证<<<代码>保存方法是按照参数约束(...)
中指定的一个指定的一次调用。您想阅读有关 1 *。
{
it.Id == request.Id
it.location == location
it.team == statusExisting.getTeam()
it.statusEnum == StatusEnum.Status.W
}
四行代码称为条件。它们是用于断言的句法或速记,也是Spock DSL的基本构件之一。它们是使写作和阅读Spock测试进行优雅,表现力和直观的一部分。
我强烈建议您学习一些基本的Groovy语法,并阅读SPOCK手册。堆栈溢出并不是您跳过使用新工具或新语言的学习部分的快捷方式。
这是一个简化的 mcve 您情况的版本:
class Data {
def Id
def location
}
class Subject {
def save(Data data) {}
def doSomething() {
save(new Data(Id: 1234, location: 'somewhere'))
}
}
class MySpec extends Specification {
def test() {
given:
Subject subject = Spy()
when:
subject.doSomething()
then:
1 * subject.save({
it.Id == 1234
it.location == 'somewhere'
})
}
}
只需在数据
构造函数调用或参数约束条件中更改一个值,以查看测试失败即可。
您只需添加多个 .with
语句,而 knex
将为您整理。
我相信您的查询最终会这样看:
const query = knex
.with(
'first',
knex('results')
.select(
'results.simulation_id',
'simulation_time',
'variable',
'value',
'runset_id',
knex.raw(`(case WHEN ended_at is null then 'INCOMPLETE' else 'COMPLETE' END) as status`),
)
.join('bookkeeping as bk', 'bk.simulation_id', 'results.simulation_id')
.where('bk.simulation_id', 1)
.andWhere('variable', INSERT_VARIABLE_HERE)
.orderBy('simulation_time'),
)
.with(
'second',
knex('bookkeeping')
.select(
'simulation_id',
db.raw('null::real as simulation_time'),
db.raw('null as variable'),
db.raw('null::real as value'),
db.raw('null as runset_id'),
db.raw(`(case WHEN ended_at is null then 'INCOMPLETE' else 'COMPLETE' END) as status`),
)
.whereNotExists(knex('first'))
.andWhere('simulation_id', INSERT_VARIABLE_HERE),
)
.select('*')
.from('first')
.unionAll([knex('second').select('*')]);
};
推动在这里没有意义。 push
意味着您有一个要添加值的数组。但是在这里您只想初始化一个数组,因此您必须使用另一种方法。
(同样值得注意的是,如果您在雄辩模型上使用 push
,它也将其保存到数据库),
您可以执行诸如 $ $ product-&gt; image ['productc'] = []之类的事情。
,然后 $ product-&gt; save()
如果要保存
关键信息在有用的评论中, santiago squarzon 和 Mathias R. Jessen ,但让我将其分解为概念上:
稍后会很清楚,您的 iSvalidn
function 在语句中在语句中调用,但不会产生 display 输出。
-
powershell函数和脚本没有返回值 - 它们产生 output ,通常写入成功输出流< /em>,PowerShell的类似于 stdout (标准输出)。
-
从这个意义上讲,PowerShell的功能更像是传统的 shell 而不是典型的编程语言。
-
与传统外壳不同,PowerShell提供六输出流,而定位这些流是一种输出信息的方式, 调试消息。存在专用的cmdlet来针对每条流,如概念 about_output_streams 帮助主题。
-
-
函数或脚本中的任何语句如果来自命令调用的输出或表达式的值没有捕获或重定向,或者很少有必要 -
写入输出
cmdlet,echo
是一个内置的别名。-
这意味着任何脚本或函数都可以具有开放式数字(多个)“返回值”。
-
相比之下, 旨在将信息打印到 host (显示,终端)和旁路成功输出流(由于PowerShell的版本5,它写入信息流,这些信息流(如所有流所做的)默认为主机)。因此,有时将其用作提供调试输出的快速方法,尽管通常最好使用
写入debug
(仅用于调试)或
-
-
与其他语言不同,
返回
是不是输出数据所需的 - 除非需要退出范围,否则它的使用可选 - 可以独立于输出语句使用;如句法糖,输出的数据可以传递给return
;例如,返回0 -LT 1
对于以下两个单独的语句0 -LT 1;返回
:0 -LT 1
输出-LT
操作的值,返回
然后退出范围。
将上述应用于您尝试的:
function isValidN {
echo "isValidN is called"
return 0 -lt 1
}
是否等效:
function isValidN {
Write-Output "isValidN is called"
Write-Output (0 -lt 1)
return
}
或,使用 intimit 输出,并省略冗余 return
呼叫,鉴于范围隐含在函数末尾退出:
function isValidN {
"isValidN is called"
0 -lt 1
}
因此,您的函数输出两个对象:字符串“ Isvalidn称为”
,以及 0 -LT的评估1
,是 $ true
使用命令调用(包括脚本和函数)中该命令,使得:
if (isValidN) # ...
有效地变为:
if (@("isValidN is called", $true)) # ...
也就是说,函数 iSvalidn
的两个对象输出(捕获)变成两元素 array (类型 [object []]
),由于它与(如果)一起使用,它被隐式评估为布尔值( [boo]
)。
PowerShell允许任何要转换为 [bool]
的对象和2+ - 元素阵列始终评估 $ $ true ,无论其内容如何 - 请参见此答案有关PowerShell的to -Boolean转换规则的摘要。
总结:
-
您打印到 display ,
“ Isvalidn”被称为“
,成为该函数输出的一部分(”返回值”),“污染”该函数的输出使用偶然数据,如果有条件评估为$ true
-
因为
“ Isvalidn被称为“
是输出的一部分,并且该输出被捕获的(并被)(如果),如果有条件,它从未打印到显示器上。
我认为 you 的意思是对:
function isValidN {
Write-Debug 'isValidN is called'
0 -lt 1
}
# Make Write-Debug output visible.
# To turn it back off:
# $DebugPreference = 'SilentlyContinue'
$DebugPreference = 'Continue'
# Call the function
if (isValidN) { 't' } else { 'f' }
输出:
DEBUG: isValidN is called
t
注意:
- 如果您制作函数或脚本为 高级>高级 您可以打开每次访问的调试输出基础,通过传递 -debug 参数,作为设置
$ debugpreference
偏好变量,这会影响当前范围和后裔范围中的所有命令。
// var dateTime = message.getDate();
var dateTime = utilities.formatdate(message.getDate(),时区,“ dd-mm-yyyy”);
尝试一下
遇到您的问题以搜索其他问题,但是您可能会尝试以下内容(当您编写问题时,这可能是不可用的):
在Mac的Docker中,转到设置 - &GT;开发功能,并启用“使用Rosetta ...”设置。
设置Dev-containers(我需要Linux images的另一个用例)时,这对我有用
我只能获得联系人,所有者,创建和更新的ID
字段。用于获取相应名称的哪个API?
谢谢 @ sindhuja laxmipuram 在此处发布您的建议,作为社区Wiki,对其他社区成员有益于类似的问题。
您可以使用以下命令列出的联系人或所有者名称
上述。获取{endpoint}/catalog/api/atlas/v2/entity/guid/guid}?minextinfo = {minextinfo}
有关更多信息,请参阅此,因此线程 | <强>如何使用REST API从Azure Purview帐户中提取角色分配信息 。
我认为它是一个C代码。您提供的代码中似乎存在多个错误。
首先,您不会意识到父母的成功阅读文件是因为:
if (open("myDir/myFile.txt", O_RDONLY) < 0)
printf ("parent proc failed to read file\n");
else
printf ("parent proc failed to read file\n");
应该是
if (open("myDir/myFile.txt", O_RDONLY) < 0)
printf ("parent proc failed to read file\n");
else
printf ("parent proc ok to read file\n");
,也许以下是:
int fd = open("myDir/myFile.txt", O_CREATE|O_RDWR);
wrte(fd, "123\n",4);
int fd = open("myDir/myFile.txt", O_CREAT|O_RDWR);
write(fd, "123\n",4);
添加:
如果您在叉子前解开安装命名空间,则您会期望父母和孩子属于同一安装命名空间。
也许您应该在其他地方移动“ unshare(mount_ns)”:
int pid = fork()
if (pid ==0) {
unshare (mount_ns)
makedir("myDir");
...
最好的问候。
不确定这是否适合您的测试,但是您可以将导航与 cy.intercept()
固执。
const href = 'url-from-link-href'
cy.location().then(loc => {
cy.intercept({url: href}, (req => {
expect(req.url).to.eq(href) // confirms href seen on intercepted network call
req.url = loc.href // stop navigation, remain at original loc
})).as('redirect')
cy.get(`a[href="${href}"]`)
.click() // click the link
cy.wait('@redirect') // confirms intercept caught the redirect
cy.visit(href)
...
})
解决方案很简单。就像可以使用 setenv
打印的环境一样,您可以使用 set
打印本地变量。希望它有用!
只需将逻辑
更改为字符
就会有所帮助。
dat%>%
mutate(across(is.logical, ~as.character(.x))) %>%
tidyr::pivot_longer(!c(id,month), names_to = "check_spot", values_to = c("control_check"))
id month check_spot control_check
<chr> <dbl> <chr> <chr>
1 A 1 C1 TRUE
2 A 1 C2 FALSE
3 A 1 C3 ok
4 A 2 C1 FALSE
5 A 2 C2 FALSE
6 A 2 C3 not
7 A 3 C1 FALSE
8 A 3 C2 TRUE
9 A 3 C3 wanrning
10 B 1 C1 TRUE
11 B 1 C2 TRUE
12 B 1 C3 not
13 B 2 C1 FALSE
14 B 2 C2 FALSE
15 B 2 C3 not
16 B 3 C1 TRUE
17 B 3 C2 FALSE
18 B 3 C3 ok
重新排序?
dat%>%
mutate(across(is.logical, ~as.character(.x))) %>%
tidyr::pivot_longer(!c(id,month), names_to = "check_spot", values_to = c("control_check")) %>%
arrange(id, check_spot)
id month check_spot control_check
<chr> <dbl> <chr> <chr>
1 A 1 C1 TRUE
2 A 2 C1 FALSE
3 A 3 C1 FALSE
4 A 1 C2 FALSE
5 A 2 C2 FALSE
6 A 3 C2 TRUE
7 A 1 C3 ok
8 A 2 C3 not
9 A 3 C3 wanrning
10 B 1 C1 TRUE
11 B 2 C1 FALSE
12 B 3 C1 TRUE
13 B 1 C2 TRUE
14 B 2 C2 FALSE
15 B 3 C2 FALSE
16 B 1 C3 not
17 B 2 C3 not
18 B 3 C3 ok
有两种方法:1) groupby.apply
np.average
和2)用懒惰的groupby手动计算。
路径1更容易编码,但是稍慢一点:
df.groupby('Date')\
.apply(lambda x: np.average(x['QTY'], weights=x['Population']))\
.reset_index(name='avg')
路径2更快,但更详细:
df['prods'] = df['QTY'] * df['Population']
groups = df.groupby('Date')
groups['prods'].sum().div(groups['Population'].sum()).reset_index(name='avg')
无论哪种方式,您都会给您输出:
Date avg
0 2021-01-01 8854.093023
1 2021-01-02 8841.767442
Note ,替代路径2的替代方案,而无需将新列添加到数据中,两次:
df['QTY'].mul(df['Population']).groupby(df['Date']).sum()\
.div(df.groupby('Date')['Population'].sum())\
.reset_index(name='avg')
涉及管道方法的另一种选择:
(df
.assign(weighted_qty = df.Population * df.QTY)
.groupby('Date')
.pipe(lambda df: df.weighted_qty.sum()/df.Population.sum())
)
Date
2021-01-01 8854.093023
2021-01-02 8841.767442
dtype: float64
您需要将第二行更改为
您正在使用哪个版本的节点?
You need to change your second to last line to
Which version of node are you using?
从django-rest-api中获取with react Frontend的JSON数据成变量