问题是使用异步内部方法测试事件处理程序,这些方法由像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');
});
}
;
};
答案 0 :(得分:0)
在jasmine 1.3及之前,没有前面的runs
的{{1}}仍会立即执行。实际上waitsFor
使规范异步。这有changed in 2.0。
或者,如果您不想在测试期间调用外部API。您可以使用jasmine-ajax(docs)之类的内容。这将允许您在测试中立即返回ajax调用,以及您要测试的任何响应。这样做的好处是可以使您的规范更快(无需等待API),并使您的规范在运行时减少对API的依赖。