2016-11-16 7 views
1

У меня возникли проблемы с модульным тестом Жасмин, который видит глобальную переменную как неопределенную. Я использую Squire для издевательства над некоторыми классами с зависимостями, вводимыми через RequireJS. Вот урезана пример моего модульного тестирования:Глобальная переменная, не назначаемая в модульном модуле Жасмин

Моего класса «Сервис» (service.js)

define(['durandal/system', 'cache'], 
    function (system, cache) { 
     var dataservice = { 

      retrieveData: function() { 
       return cache.getCachedData(); 
      } 
     }; 

     return dataservice; 
}); 

Моей арматура издеваться «Кэш» зависимость.

define(['Squire'], function (Squire) { 
    var injector = new Squire(); 

    return { 
     initialize: function() { 
      injector.clean(); 

      injector.mock('cache', { 
       getCachedData: function() { 
        return { item: "one" }; 
       } 
      }); 

      return injector; 
     } 
    }; 
}); 

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

define(['dataservice_fixture', 'durandal/system'], 
    function (testFixture, system) { 
     var container = testFixture.initialize(); 
     var dataserviceModule; 

     container.require(['service'], function (preparedDataservice) { 
      dataserviceModule = preparedDataservice; 
     }); 

     describe('The data service ', function() { 
      it('should exist.', function() { 
       expect(dataserviceModule).toBeDefined(); 
      }); 
     }); 
    }); 

В моем 'должен существовать' тест, dataserviceModule не определено. Я бы ожидал, что это произойдет, когда мой прибор (контейнер выше) втянет его. Теперь, если я вытащил «сервис» в верхней части моего spec в define() и установил там dataserviceModule, тест видит его как определенный ,

Почему именно мой контейнер. Требуется либо не устанавливать переменную одну область выше, либо быть потерянной между этим и запуском теста? Я прочитал это this question вокруг подъема, но я не повторно объявляю одно и то же имя переменной в моем контейнере.

ответ

1

Похоже, это на самом деле условие гонки в том, что тесты выполняются до того, как мой модуль может быть загружен. Я добавил в waitsFor и защелку, которая истинна после загрузки моего модуля, чтобы решить эту проблему.

Для всех, кто перебегает, зарегистрируйтесь http://www.htmlgoodies.com/beyond/javascript/test-asynchronous-methods-using-the-jasmine-runs-and-waitfor-methods.html

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

  • Нет связанных вопросов^_^