0

コントローラーのテストを機能させる方法がわかりません。私はngStartシードプロジェクトで遊んでいます。そこで、リポジトリ ( https://github.com/Havrl/ngStart ) をフォークし、非常に基本的な単体テストを作成したいと考えています。

私のコントローラーテストファイル:

define(function() {
"use strict";
describe("the contactcontroller", function () {
    var contactController, scope;

    beforeEach(function () {
        module("contact");

        inject(["ContactController", function (_contactController) {
            contactController = _contactController;
        }]);
    });


    it("should give me true", function () {
        expect(true).toBe(true);
    });
});

});

しかし、それは機能していません。

私は何が欠けていますか?

4

1 に答える 1

3

次の質問で回答されているように、コントローラーは新しいスコープで手動でインスタンス化する必要があります。

Mocha を使用して Angular.js で angular.module().controller() で作成されたコントローラーをテストする方法

さらに、使用しているプロジェクト (私のもの:-)) は、ルート定義内でコントローラーを定義しており、angular.controller(...) への呼び出しではありません。

欠点は、コントローラーが angularJS (afaik) に名前で認識されないため、上記の回答のコードが機能しないことです。

ctrl = $controller("ContactController", {$scope: scope });

代わりに、次のように、テスト ファイル内で requireJS を使用してコントローラーを明示的にロードし、関数を $controller(..) 呼び出しに渡す必要があります。

define(["ContactController"], function(ContactController) {
"use strict";
describe("the contactcontroller", function () {
    var contactController, scope;

    beforeEach(function () {
        module("contact");

        inject(["$rootScope", "$controller", function ($rootScope, $controller) {
            scope = $rootScope.$new();
            contactController = $controller(ContactController, {$scope: scope});
        }]);
    });

    ....
});
于 2013-10-06T10:25:17.493 に答える