簡體   English   中英

如何在我的Karma / Mocha測試套件中測試Angular 1.5控制器?

[英]How can I test my Angular 1.5 controller in my Karma/Mocha test suite?

我正在嘗試在Mocha測試中實例化我的控制器(使用Karma作為運行程序),以便測試某些控制器方法。 我正在遵循與此Angular ES6 Webpack設置類似的內容

這是我正在嘗試的:

// 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 ,但是仍然拋出該false ,它不是函數。 所以我已經死胡同了。

關於如何實例化控制器以用於測試的任何想法?

您使用的是哪個版本的angular? 遇到了同樣的問題,結果發現我有1.5.7的角度和1.5.10的角度模擬。 將角球設置為1.5.7(角球的相同版本)可解決此問題。 preAssignBindingsEnabled已在1.5.10上添加,例如: https : //github.com/angular/angular.js/blob/master/CHANGELOG.md

您將必須降級到1.5.5。 高於此值的任何錯誤都會給您帶來“ TypeError:$ compileProvider.preAssignBindingsEnabled不是函數”錯誤。

另外,請確保您使用的是相同的版本(1.5.5)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM