对 Jasmine 间谍的重置调用不会 return
Reset call on Jasmine spy does not return
我正在使用 Jasmine (2.2.0) spy 来查看是否调用了某个回调。
测试代码:
it('tests', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
done();
});
});
这按预期工作。但是现在,我要添加第二个级别:
it('tests deeper', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
spy.reset();
return objectUnderTest.someFunction(spy);
}).then(function() {
expect(spy.toHaveBeenCalled());
expect(spy.callCount).toBe(1);
done();
});
});
此测试从未 returns,因为显然从未调用 done
回调。如果我删除行 spy.reset()
,测试确实完成了,但显然在最后的期望中失败了。但是,callCount
字段似乎是 undefined
,而不是 2
。
Jasmine 2 的语法在间谍功能方面不同于 1.3。
请参阅 Jasmine 文档 here.
具体来说,你用 spy.calls.reset();
重置了一个间谍
测试应该是这样的:
// Source
var objectUnderTest = {
someFunction: function (cb) {
var promise = new Promise(function (resolve, reject) {
if (true) {
cb();
resolve();
} else {
reject(new Error("something bad happened"));
}
});
return promise;
}
}
// Test
describe('foo', function () {
it('tests', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
done();
});
});
it('tests deeper', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
spy.calls.reset();
return objectUnderTest.someFunction(spy);
}).then(function () {
expect(spy).toHaveBeenCalled();
expect(spy.calls.count()).toBe(1);
done();
});
});
});
参见 fiddle here
另一种写法:
const spy = spyOn(foo, 'bar');
expect(spy).toHaveBeenCalled();
spy.calls.reset();
我正在使用 Jasmine (2.2.0) spy 来查看是否调用了某个回调。
测试代码:
it('tests', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
done();
});
});
这按预期工作。但是现在,我要添加第二个级别:
it('tests deeper', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
spy.reset();
return objectUnderTest.someFunction(spy);
}).then(function() {
expect(spy.toHaveBeenCalled());
expect(spy.callCount).toBe(1);
done();
});
});
此测试从未 returns,因为显然从未调用 done
回调。如果我删除行 spy.reset()
,测试确实完成了,但显然在最后的期望中失败了。但是,callCount
字段似乎是 undefined
,而不是 2
。
Jasmine 2 的语法在间谍功能方面不同于 1.3。 请参阅 Jasmine 文档 here.
具体来说,你用 spy.calls.reset();
测试应该是这样的:
// Source
var objectUnderTest = {
someFunction: function (cb) {
var promise = new Promise(function (resolve, reject) {
if (true) {
cb();
resolve();
} else {
reject(new Error("something bad happened"));
}
});
return promise;
}
}
// Test
describe('foo', function () {
it('tests', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
done();
});
});
it('tests deeper', function (done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function () {
expect(spy).toHaveBeenCalled();
spy.calls.reset();
return objectUnderTest.someFunction(spy);
}).then(function () {
expect(spy).toHaveBeenCalled();
expect(spy.calls.count()).toBe(1);
done();
});
});
});
参见 fiddle here
另一种写法:
const spy = spyOn(foo, 'bar');
expect(spy).toHaveBeenCalled();
spy.calls.reset();