jasmine
AngularJS

AngularJS $timeout を Jasmine から実行した際にコールバックが実行されない問題

More than 3 years have passed since last update.

下のコードだと$timeoutサービスのコールバックが実行さずにタイムアウトしてしまう。

appSpec.js
it('$timeout test', function () {
    var value = null;
    $timeout(function () {
        value = 'hoge';
    }, 100);

    expect(value).toBeNull();

    waitsFor(function () {
        return value !== null;
    }, 'timeout', 200);

    runs(function () {
        expect(value).toEqual('hoge');
    });
});

どうやら$timeout.flush(delay)をコールしてタイマーを進めると実行されるようになる模様。

appSpec.js
it('$timeout test', function () {
    var value = null;
    $timeout(function () {
        value = 'hoge';
    }, 100);

    expect(value).toBeNull();

    $timeout.flush();

    expect(value).toEqual('hoge');
});