0

問題は、facebook などの SDK によって実行される非同期内部メソッドを使用してイベント ハンドラーをテストすることです。

単純なテストは次のとおりです。

describe('Listens to someevent', function () {


       it('and triggers anotherevent', function () {
            var eventSpy = spyOnEvent(document, 'anotherevent');
            var data = {
              param1: 'param1',
              param2: 'param2',

            }
            this.component.trigger('somevent', data);

            runs(function() {
                expect(eventSpy).toHaveBeenTriggeredOn(document);
            });

        });
      });

オプションで someevent がトリガーされると、コンポーネント ハンドラーが起動されます。

this.handler = function (e, data) {

     SDK.apicall(data, function (err, response) {

                    if (!err) {
                        doSomething();
                    }

                    // trigger data event
                    that.trigger(document, 'anotherevent');

                });

            }
            ;

        };
4

1 に答える 1

0

jasmine 1.3 以前では、前置runsなしの awaitsForはすぐに実行されます。waitsFor仕様を非同期にするのは実際にはです。これは2.0 で変更されました

または、テスト中に外部 API を本当に呼び出したくない場合。jasmine-ajax ( docs ) のようなものを使用できます。これにより、テストしたい応答を使用して、テストですぐに ajax 呼び出しを返すことができます。これには、spec を高速化する (API を待つ必要がない) という利点があり、spec が実行時に API が稼働していることへの依存度が低くなります。

于 2014-02-17T17:34:25.760 に答える