2016-12-15 45 views
0

我試圖在我的摩卡測試中實例化我的控制器(使用Karma作爲跑步者)以測試一些控制器方法。我正在追蹤類似於這個Angular ES6 Webpack setup的東西。如何在我的Karma/Mocha測試套件中測試我的Angular 1.5控制器?

這裏就是我想:

// controller.js 

// also, the component that uses this controller 
// declares some bindings, like "someData: '<'" 

export default class SomeController { 
    // notice the injection 
    constructor($timeout) { 

    // uses ng-annotate 
    'ngInject'; 

    } 
} 

// test.spec.js (same dir as controller) 

import SomeController from './controller.js' 

describe('MyComponent',() => { 
    let $rootScope; 
    let $componentController; 
    let $timeout; 
    let makeController; 

    beforeEach(window.module('app')); 

    beforeEach(inject((_$componentController_, _$timeout_) => { 
    $componentController = _$componentController_; 
    $timeout = _$timeout_; 
    makeController =() => { 
     // I've tried the 2 options below 
     // return new Controller($timeout) 
     // return $componentController('myComponent', { $timeout }, { someData: [] }); 
    }; 
    })); 

    describe('Controller',() => { 
    it('does something',() => { 

     // FAILS HERE 

     $ctrl = makeController(); 

    }); 
    }); 
}); 

所以,當我做new Controller(),預計$timeout作爲參數傳遞給構造函數(它應該是一個依賴注入)來傳遞,我無法弄清楚如何在someData通過結合。

如果我不是嘗試$componentController(如建議Angular 1.5 component docs),我得到這個奇怪的錯誤:

compileProvider.preAssignBindingsEnabled is not a function 

所以,我擡頭一看這個方法$compileProvider.preAssignBindingsEnabled,並試圖將其設置在兩個truefalse我模塊配置,但它仍然拋出說它不是一個功能。所以我已經走到了死衚衕。

任何想法如何我可以實例化我的控制器使用它進行測試?

回答

4

您正在使用哪種角度的版本?進入同樣的問題,事實證明,我有角1.5.7和角模擬1.5.10。 把角度嘲弄到1.5.7(相同版本的角度)解決了這個問題。 preAssignBindingsEnabled已被添加到1.5.10 例如:https://github.com/angular/angular.js/blob/master/CHANGELOG.md

+0

有趣。謝謝你的回答,我會檢查一下,看看是否是這個問題。 –

+0

最後,這是問題嗎? – Yoann

0

您將不得不降級到角1.5.5。任何比這更高的值會給你「TypeError:$ compileProvider.preAssignBindingsEnabled不是函數」的錯誤。

另外,請確保你是angular-mocks是相同的版本(1.5.5)。

相關問題