假设我在script.js中有以下(简化的)JavaScript代码
(function() {
var _val;
Object.defineProperty(window, "myCallback", {
// ...
set: function(val) {
_val = val;
setTimeout(_val, 0);
}
});
})();
现在我正在尝试创建一个声明断言传递的val回调被调用的规范。
以下(简化)scriptSpec.js:
describe("setter", function() {
var spy = jasmine.createSpy('callback');
it("should call passed callback", function() {
window.myCallback = spy;
expect(spy).toHaveBeenCalled();
});
});
这个规范有一个问题,因为它没有在window对象上注册我的属性,因此,调用
window.myCallback在我的测试中,不会调用setter。
有没有合理的方法用Jasmine测试这些东西?
答案 0 :(得分:0)
看起来像一个简单的错误。你没有在你的测试用例中使用你的间谍。
describe("setter", function () {
var spy = jasmine.createSpy("callback"); // "callback" is just the internal name
it("should call passed callback", function () {
window.myCallback = spy; // <--- Use the actual spy object here
expect(spy).toHaveBeenCalled();
});
});
答案 1 :(得分:0)
问题是在 setTimeout()函数调用中设置_ val 变量。然后在 setTimeout()成功完成工作之前调用Jasmine的预期。
我可以使用Jasmine的运行/等待功能来验证setter行为。
it("should call passed callback", function() {
var spy = jasmine.createSpy('callback');
runs(function () { window.myCallback = spy; });
waits(10);
runs(function () { expect(spy).toHaveBeenCalled(); });
});