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 调用,并带有您想要测试的任何响应。这具有使您的规范更快的优势(无需等待 API),并使您的规范在运行时对 API 的依赖减少。

于 2014-02-17T17:34:25.760 回答