21

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フィールドはundefinedではなく のようです2

4

2 に答える 2

38

Jasmine 2 の構文は、スパイ機能に関して 1.3 とは異なります。Jasmine のドキュメントを参照してください

具体的には、スパイをリセットします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();
        });
    });
});

ここでフィドルを参照してください

于 2015-07-23T13:18:25.890 に答える