5

Yeoman をインストールして、最初のプロジェクトを作成しました。Yoによって作成されたデフォルトのangularプロジェクトのユニットテストに頭を悩ませようとしています。「grunt server」を呼び出すとプロジェクトは正常に実行されますが、単体テスト「grunt test:unit」を実行すると、「Argument 'MainCtrl' is not a function, got undefined」というエラーが表示されます。

このテストを適切に実行するには何が欠けていますか?

再度、感謝します

-- コントローラー

'use strict';

angular.module('myApp')
.controller('MainCtrl', function ($scope) {
$scope.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma',
'mytest'
  ];
});

-- テストまで

 'use strict';

 describe('Controller: MainCtrl', function () {

 // load the controller's module
 beforeEach(module('myApp'));

var MainCtrl,
 scope;

  // Initialize the controller and a mock scope
 beforeEach(inject(function ($controller, $rootScope) {
  scope = $rootScope.$new();
 MainCtrl = $controller('MainCtrl', {
 $scope: scope
});
}));

it('should attach a list of awesomeThings to the scope', function () {
expect(scope.awesomeThings.length).toBe(4);
});
});
4

2 に答える 2

3

このコードをコピーして貼り付けると、問題なく実行されます。表示されるエラー メッセージは、コントローラー (名前) がインジェクターに認識されていないことを示しています。karma.conf.jsにコントローラーの JavaScript ファイルを含めるのを忘れていませんか?

于 2013-10-26T06:18:31.583 に答える
0

私の場合、これと同じエラーを引き起こしたのは「app.js」のコピーでした。grunt テストに /**/* パターンが含まれていたため、html ページのどこにも使用されていませんでしたが、含まれていたため、モジュールの定義が複製され、おそらく からロードされたコントローラーがリセットされましたapp.js。そのため、次のようなエラーが発生していました。

Error: [ng:areq] Argument 'MainCtrl' is not a function, got undefined http://errors.angularjs.org/1.4.7/ng/areqp0=MainCtrl&p1=not%20a%20function%2C%20got%20undefined

このファイルを削除すると、すべてが正常に機能していました。何がうまくいかなかったのかを理解するのに長い時間がかかりましたが、最終的に原因を見つけました。

于 2015-11-04T05:55:27.683 に答える