2013-07-15 62 views
0

因此,我有以下幾點:angularjs工廠包裝圍繞lodash未加載測試

angular.module('common.lodash', []).factory('_', function() { 
    _.additionFunctionOnLodashThatICreated = function(foo, bar, baz) { ... }; 
    return _; 
}); 

我在另一個模塊取決於lodash:

angular.module('common.gridhelper', ['common.lodash']).factory('gridhelper', function(_) { 
    var service; 
    service.foo = function (collection) { 
    // find is a native function on lodash 
    return _.find(...); 
    } 
    return service; 
}); 

當我瀏覽到該網站在瀏覽器中,一切都只是「有效」。但是,當我嘗試寫幾個測試時,我得到了不同的結果。

下面的作品,所以我知道我的服務是可訪問:

describe('Lodash Service:', function() { 
    beforeEach(module('common.lodash')); 
    it('should get an instance of the lodash factory', inject(function(_) { 
    expect(_).toBeDefined(); 
    })); 
}); 

但是這個失敗:

describe('GridHelper Service:', function() { 
    var gh; 
    beforeEach(function() { 
    angular.module('test', [ 
     'common.lodash', 
     'common.gridhelper' 
    ]); 
    }); 
    beforeEach(module('test')); 

    it('should return a good foo', inject(function(gridhelper) { 
    gridhelper.foo({'a': { 'b': 0 }}); 
    }); 

返回錯誤:

TypeError: 'undefined' is not an object (evaluating '_.find(...)') 

爲了好玩,我嘗試在gridhelper服務中打印出'_',並且在通過測試運行時顯示爲空,但是填充了wh通過瀏覽器運行。

任何人都對我失蹤的東西有想法嗎?

回答

0

原來我的測試在我的實現中暴露了一個問題。 _.find返回null,我試圖從沒有首先檢查的情況下提取返回值。