gpt4 book ai didi

javascript - JasmineJS 'isNot' 属性

转载 作者:行者123 更新时间:2023-12-03 10:39:33 24 4
gpt4 key购买 nike

关于jasmine.addMatchers的快速了解。使用 git 的最新 Jasmine 构建,似乎执行自定义匹配器的格式与我在“Jasmine JavaScript 测试”书中看到的代码有很大不同。书中的代码如下:

this.actual or maybe even this.isNot

新格式类似于:

compare: function (actual, expected) {
return {
pass: some true or false statement...
}
}

因此,在这种情况下,“this.actual”实际上是传入的参数“actual”,这很酷。如果我们调用一个新的匹配器,例如:

,访问 isNot 属性怎么样?
expect(investment).not.toBeAGoodInvestment();

因此,在“toBeAGoodInvestment”主体内,我们应该能够访问“isNot”属性。不知道如何使用新格式做到这一点。我想出了如何将 this.message 从旧方式设置为新方式,如下所示:

return {
pass: some statement...,
message: 'some message'
}

我们希望在 jasmine 报告器中显示的消息将根据“isNot”的设置而动态变化。

最佳答案

在深入研究实际的 Jasmine.js 源代码后,我发现参数被传递到自定义匹配器的比较函数中,事实上,“isNot”根本没有进入。 “this.isNot”在 Jasmine 源本身的“Expectation.prototype.wrapCompare”函数的上下文中可用,但真正需要它的是我创建的自定义匹配器。

所以现在在这个wrapCompare函数中,我只是在“if”语句中添加了args.push语句,如下所示:

if (this.isNot) {
//-- Added this line
args.push(this.isNot);
matcherCompare = matcher.negativeCompare || defaultNegativeCompare;
}

现在,调用匹配器,我可以这样做:

expect(investment).not.toBeAGoodInvestment();

然后实际的匹配器看起来像这样:

toBeAGoodInvestment: function () {
return {
compare: function (actual, isNot) {
return {
pass: actual.isGood(),
message: 'Expected investment to be a ' +
((isNot) ? 'bad' : 'good') + ' investment'
}
}
};
}

这是一个很好的小研究任务,可以弄清楚 Jasmine 在幕后做了什么。

如果有任何其他方法可以将“isNot”注入(inject)到比较函数中,请告诉我。

关于javascript - JasmineJS 'isNot' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com