2013-05-14 2 views
4

Я пытаюсь проверить функцию, которая требует модуля с использованием жасмин и requirejs. Вот фиктивный код:Тестирование requireJS методы async с Jasmine

define("testModule", function() { 
    return 123; 
}); 
var test = function() { 
    require(['testModule'], function(testModule) { 
     return testModule + 1; 
    }); 
} 
describe("Async requirejs test", function() { 
    it("should works", function() { 
     expect(test()).toBe(124); 
    }); 
}); 

Это терпит неудачу, потому что это метод асинхронной. Как я могу провести с ним тест?

Примечание: Я не хочу менять свой код, просто мои тесты describe функция.

ответ

4

Для тестирования асинхронного материала проверки runs(), waits() и waitsFor():

https://github.com/pivotal/jasmine/wiki/Asynchronous-specs

Хотя этот способ выглядит немного некрасиво, как для меня, поэтому вы можете также рассмотреть следующие варианты.

1. Я рекомендую вам попробовать jasmine.async, что позволяет писать асинхронные тестовые случаи таким образом:

// Run an async expectation 
async.it("did stuff", function(done) { 
    // Simulate async code: 
    setTimeout(function() { 
     expect(1).toBe(1); 
     // All async stuff done, and spec asserted 
     done(); 
    }); 
}); 

2. Также вы можете запустить тесты в require

require([ 
    'testModule', 
    'anotherTestModule' 
], function(testModule, anotherTestModule) { 

    describe('My Great Modules', function() { 

     describe('testModule', function() { 
      it('should be defined', function() { 
       expect(testModule).toBeDefined(); 
      }); 
     }); 

     describe('anotherTestModule', function() { 
      it('should be defined', function() { 
       expect(anoterTestModule).toBeDefined(); 
      }); 
     }); 
    }); 
}); 

3. Другое дело, я думаю, что этот код не работает, как вы ожидали:

var test = function() { 
    require(['testModule'], function(testModule) { 
     return testModule + 1; 
    }); 
}; 

Потому что, если вы звоните test(), это не вернет вам testModule + 1.

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