1

我的測試設置有問題。當一個文件中的所有內容都可以工作時,它不會在代碼分散在多個文件中時使用。AngularJS - 使用模塊approuch進行測試

當代碼傳播按下面,我得到一個錯誤Error: [$injector:unpr] Unknown provider: twoPlusTwoFilterProvider <- twoPlusTwoFilter

// js/index.js 
angular.module('app', []); 

// js/twoPlusTwoFilter.js 
angular.module('app').filter('hex', function hex(){ 
    return function(input){ 
     return input+input; 
    } 
}); 

// here is my test 
describe('check sanity', function() { 

    beforeEach(module('app')); 

    it('should return 4', inject(function(hexFilter) { 
     expect(hexFilter(2)).toEqual(4); 
    })); 

}); 

僅供參考,我包括善緣的conf角嘲笑。任何建議非常感謝。

+0

您是否加載了karma.conf.js中的所有文件? – marneborn 2014-08-28 16:40:44

+0

什麼是'twoPlusTwoFilter'? – PSL 2014-08-28 16:42:44

+0

@marneborn - 是的,所有圖書館,來源和測試.. – Iladarsda 2014-08-28 16:43:30

回答

1

您應該嘗試注入filterprovider並獲得hex過濾器。

var $filter; 

beforeEach(function() { 
    module('app'); 
}); 

beforeEach(inject(function (_$filter_) { //<-- Get the filter provider 
    $filter = _$filter_; 
})); 

it('should return 4', function() { 
    expect($filter('hex')(2)).toEqual(4); //Not get your `hex` filter and run it 
}); 

或注入過濾器前綴。

beforeEach(inject(function (_hexFilter_) { 
    $filter = _hexFilter_; 
})); 

Plnkr

過濾器是隻將變換輸入到輸出的功能。但是過濾器需要依賴注入。爲了達到這個目的,一個過濾器定義由一個工廠函數組成,該工廠函數用依賴註釋並負責創建一個過濾函數。

+0

是我的內聯'inject(function(filterNameHere){})'不夠好? – Iladarsda 2014-08-28 16:44:48

+0

所有作品,謝謝!請告訴我們更多關於filterProvider&inject – Iladarsda 2014-08-28 16:48:52

+1

@Iladarsda我已經提供了官方文檔鏈接以及答案中的摘錄... – PSL 2014-08-28 16:49:55