2014-09-01 4 views
2

Я использую Jasmine 2.0 и require.js. Я не могу заставить асинхронные тесты работать правильно, когда я помещаю асинхронный код в функцию beforeEach. Мой оператор все еще работает до завершения асинхронного вызова.Jasmine 2.0 async beforeEach не ждет асинхронного завершения

Вот моя спецификация:

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.

В идеале, мне хотелось бы, чтобы async работал, а не был сухим, и копирование каждого требовалось в отдельные его заявления.

Любые советы?

ответ

3

Локальный запрос 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(); 
    }); 

}); 
+0

Ах, да! Спасибо. Я подумал, что мне не нужен асинск в «этом», но он все пытался. – joehand

Смежные вопросы