我想确认一个值是十进制(或0),因此该数字应大于或等于零且小于1.
describe('percent',function(){
it('should be a decimal', function() {
var percent = insights.percent;
expect(percent).toBeGreaterThan(0);
expect(percent).toBeLessThan(1);
});
});
Run Code Online (Sandbox Code Playgroud)
我如何模仿"> = 0"?
我们添加了一个toHaveClass 自定义的茉莉花匹配器,为了使其工作,我们不得不将其添加到beforeEach()(在本主题的帮助下).
并且,为了遵循DRY原则并避免在需要的每个beforeEach()规范中重复匹配器定义toHaveClass,我们在以下位置添加了一个beforeEach()块onPrepare():
onPrepare: function () {
var jasmineReporters = require("jasmine-reporters");
require("jasmine-expect");
// ...
// custom matchers
beforeEach(function() {
jasmine.addMatchers({
toHaveClass: function() {
return {
compare: function(actual, expected) {
return {
pass: actual.getAttribute("class").then(function(classes) {
return classes.split(" ").indexOf(expected) !== -1;
})
};
}
};
}
});
});
},
Run Code Online (Sandbox Code Playgroud)
它实际上是有效的,但是每当我看到beforeEach()量角器配置中的块时,我就会有一种微观凹陷和强烈的感觉,它不是定义匹配器的好地方.
问题:
是否有更好的方法或地点来定义自定义匹配器?
我在angular2项目中使用jasmine,并且在编写自定义匹配器时遇到一些麻烦.我希望能够比较两个相对复杂的对象.我发现这篇文章声称可以解决这个问题,但它只会导致一个打字稿错误,说明它无法识别jasmine Matchers对象上的新方法.相关代码是这样的:
declare module jasmine {
interface Matchers {
toBeNumeric(): void;
}
}
Run Code Online (Sandbox Code Playgroud)
另一篇文章给出了一个类似但略有不同的解决方案,它给出了同样的错
declare namespace jasmine {
interface Matchers {
toHaveText(expected: string): boolean;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个
let m: jasmine.Matchers = expect(someSpy.someMethod).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
并得到此错误:
类型'jasmine.Matchers'不能指定为'jasmine.Matchers'类型.存在两种具有此名称的不同类型,但它们是不相关的.
这似乎表明该declare namespace jasmine语句正在创建一个新的jasmine命名空间而不是扩展现有的命名空间.
那么如何创建我自己的打字稿,打字稿会很满意?