Angular Teaspoonで実行されているJasmineを使用していくつかの単体テストを作成しようとしています。テストは実行中ですが、失敗しているコントローラーの存在をテストするだけの簡単なテストがあります。次のテスト設定があります。
//= require spec_helper
require("angular");
require("angular-mocks");
var app = require("./app");
describe("My App", function() {
describe("App Controllers", function() {
beforeEach(module("app"))
it("Should have created an application controller", inject(function($rootScope, $controller){
var scope = $rootScope.$new();
ctrl = $controller("ApplicationCtrl", { $scope: scope });
}));
})
})
Requireステートメントは、依存関係を処理しているBrowserifyによって処理されますが、スペックヘルパーに使用しているスプロケットにフックすることもできます。
必要なアプリの中に、
require("angular");
var controllers = require("./controllers");
var app = angular.module("app", [
"app.controllers"
]);
exports.app = app;
このテストを実行すると、次のエラーが発生します
Failure/Error: TypeError: '[object Object]' is not a function (evaluating 'module("aialerts")')
私はこれを理解するためにかなりの時間を費やしましたが、何が起こっているのか分かりません。助けてくれてありがとう。
同じ問題がありました。この行を変更します。
beforeEach(module("app"))
に:
beforeEach(angular.mock.module("app"))
Browserifyはノードスタイルのrequire
を使用します。ここで、module
は機能をエクスポートするために使用できるオブジェクトです。
console.log(module); // {exports: {}}
angular-mocks.jsは関数をwindow.module
にアタッチしようとしますが、それはBrowserify/Nodeでは不可能です。
angular-mocks source を見ると、angular-mocksもmodule
関数をangular.mock
にアタッチしているようです。したがって、グローバルmodule
オブジェクトを使用する代わりに、angular.mock.module
を使用する必要があります。