特定のコールバックが呼び出されるかどうかを確認するために、Jasmine(2.2.0)スパイを使用しています。
テストコード:
_it('tests', function(done) {
var spy = jasmine.createSpy('mySpy');
objectUnderTest.someFunction(spy).then(function() {
expect(spy).toHaveBeenCalled();
done();
});
});
_
これは期待どおりに機能します。しかし、今、私は第2レベルを追加しています:
_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();
});
});
_
明らかにdone
コールバックは呼び出されないため、このテストは戻りません。行spy.reset()
を削除すると、テストは終了しますが、最後の期待値で明らかに失敗します。ただし、callCount
フィールドは_2
_ではなくundefined
のようです。
Jasmine 2の構文は、スパイ機能に関して1.3とは異なります。 Jasmine docs 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();
});
});
});
フィドルを参照してください こちら
別の書き方:
spyOn(foo, 'bar');
expect(foo.bar).toHaveBeenCalled();
foo.bar.calls.reset();