真实快速jasmine.addMatchers
。使用git的最新Jasmine构建,看起来自定义匹配器的格式与我在“Jasmine JavaScript Testing”一书中看到的代码大不相同。在书中它有代码,如:
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'
}
我们希望在茉莉花记者中出现的信息将根据“isNot”设置的内容而动态显示。
答案 0 :(得分:1)
在实际的Jasmine.js源代码中进行挖掘之后,我发现了参数传递到自定义匹配器的比较函数的位置,实际上,' isNot'根本没有做到这一点。 ' this.isNot'可以在期望.prototype.wrapCompare' Expectation.prototype.wrapCompare'在Jasmine源本身内部运行,但真正需要的是我创建的自定义匹配器。
所以现在在这个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'注入比较功能,请告诉我。