2016-11-16 85 views
1

我在Jasmine單元測試中看到一個全局變量未定義的問題。我正在使用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是不確定的。我期望它是當我的fixture(上面的容器)將它拉入時。現在,如果我在define()中的規範頂部提供'service',並在那裏設置dataserviceModule,那麼測試會將其視爲已定義。

爲什麼我的container.require要麼不將變量設置爲更高的範圍,要麼在測試運行之間丟失一個變量?我在吊裝周圍讀取這個this question,但是我沒有在我的container.require中重新聲明相同的變量名稱。

回答