具有异步调用的Jasmine测试事件

时间:2014-02-17 08:25:01

标签: jasmine twitter-flight

问题是使用异步内部方法测试事件处理程序,这些方法由像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');

                });

            }
            ;

        };

1 个答案:

答案 0 :(得分:0)

在jasmine 1.3及之前,没有前面的runs的{​​{1}}仍会立即执行。实际上waitsFor使规范异步。这有changed in 2.0

或者,如果您不想在测试期间调用外部API。您可以使用jasmine-ajaxdocs)之类的内容。这将允许您在测试中立即返回ajax调用,以及您要测试的任何响应。这样做的好处是可以使您的规范更快(无需等待API),并使您的规范在运行时减少对API的依赖。