1

単純な Jasmine テストを AngularJS モジュールで動作させることができません。アドバイスをいただければ幸いです。

コントローラ付きモジュール:

(function(myApp) {
    myApp.App = angular.module("MyApp", []).
    config(["$routeProvider", function($routeProvider) {
    $routeProvider.
        when('/', { controller: "CoreAppController", templateUrl: 'App.html' }).
        otherwise({ redirectTo: '/' });
    }]);

    myApp.App.controller("CoreAppController", function($scope, $http, widgetService)     {
        /* controller definition */
    }
}(window.myApp = window.myApp || {}));

単体テスト:

(function(myApp) {
    describe("CoreAppController spec", function() {
        describe("Create the CoreApp", function() {
            beforeEach(angular.module("MyApp"));
            describe("CoreAppController", function() {
                it("Should create the core application",
                    expect(1).toBeGreaterThan(0)
                )
            });
        })
    });
}(window.myApp = window.myApp || {}));

テスト ファイルに含まれるファイルの順序は次のとおりです。

  • jasmine.js
  • ジャスミン-html.js
  • angular.min.js
  • angular.mock.js
  • app.js (モジュールとコントローラーの定義を含む)
  • CoreAppControllerSpec.js (単体テスト ファイル)。

このテストを実行すると、次のエラーが発生します。

TypeError: Object # has no method 'apply' at jasmine.Block.execute (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:1064:17) at jasmine.Queue.next_ (file: ///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2096:31) jasmine.Queue.start (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049) :8) jasmine.Spec.execute (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2376:14) で jasmine.Queue.next_ (file:///C:/TeamFoundation) で/PRE/test/jasmine/jasmine.js:2096:31) jasmine.Queue.start で (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049:8) jasmine.Suite で.execute (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2521:14) jasmine.Queue.next_ (file:///C:/TeamFoundation/PRE/test/jasmine/) でjasmine.js:2096:31) jasmine.Queue.start (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2049:8) jasmine.Suite.execute (file:///C:/TeamFoundation/PRE/test/jasmine/jasmine.js:2521:14) で

テストから「モジュール」行を削除すると、テストは成功します。私は何を間違っていますか?

4

3 に答える 3

5

angular.moduleは新しいモジュールを作成します。

moduleは angular.mock.module のエイリアスです - 簡単にアクセスできるように window に公開されています - モジュールの設定を収集します。

angular.module を module に変更すると問題が解決したのはそのためです。

よろしく、エイタン

于 2013-03-05T16:26:02.413 に答える
0

不思議なことに、「angular.module」を「module」に変更するだけで問題が解決しました。

于 2013-02-07T13:19:43.713 に答える
0

より良い解決策はangular-mocks.js、スクリプトの直後に含めるangular.jsことです。これにより、angular-mocks が定義されますwindow.module = angular.mock.module = ...(window.injectおよび など...)。

于 2013-11-18T17:08:06.327 に答える