Jasmine 2.0 async beforeEach不等待异步完成

时间:2014-09-01 03:08:25

标签: javascript asynchronous jasmine require

我正在使用Jasmine 2.0和require.js。当我将异步代码放在beforeEach函数中时,我无法让异步测试正常工作。在异步调用完成之前,我的it语句仍在运行。

这是我的规格:

describe("App Model :: ", function() {
    var AppModel;

    beforeEach(function(done) {
        require(['models/appModel'], function(AppModel) {
            AppModel = AppModel;
            done();
        });
    });

    // THIS SPEC FAILS AND RUNS BEFORE ASYNC CALL
    it("should exist", function(done) {
        this.appModel = new AppModel()
        expect(this.appModel).toBeDefined();
        done();
    });

    // THIS SPEC PASSES
    it("should still exist", function(done) {
        require(['models/appModel'], function(AppModel) {
            this.appModel2 = new AppModel()
            expect(this.appModel2).toBeDefined();
            done();
        });
    });

});

当我在it中包含异步时,第一个规范失败但第二个规范通过。

理想情况下,我希望beforeEach异步可以工作而不是不干,并将每个需要复制到单独的语句中。

任何提示?

1 个答案:

答案 0 :(得分:3)

本地require var应该有另一个名称包装到外部作用域。同样在“它”中你不需要完成,它只在异步部分。这样的事情必须奏效:

describe("App Model :: ", function() {
  var AppModel;

  beforeEach(function(done) {
    require(['models/appModel'], function(_AppModel) {
        AppModel = _AppModel;
        done();
    });
  });

  it("should exist", function() {
    var appModel = new AppModel()
    expect(appModel).toBeDefined();
  });

});