3

私は単純なコントローラーを持っています:

app.controller("RegisterController", function ($scope, $location) {

    // Do something

});

そして、私がやろうとしているのは、このコントローラーが定義されていることをテストすることだけです:

describe('RegisterController', function() {

    var $rootScope, $scope, $controller;

    beforeEach(module('myApp'));

    beforeEach(inject(function(_$rootScope_, _$controller_){
        $rootScope = _$rootScope_;
        $scope = $rootScope.$new();
        $controller = _$controller_;

        $controller('RegisterController', {'$rootScope' : $rootScope, '$scope': $scope});
    }));

    it('should exist', function() {
        expect($controller).toBeDefined();
    });
});

そして、次のエラーが表示されます。

TypeError: undefined is not a function
4

1 に答える 1

5

間違ったことをテストしようとしています。独自のコントローラーをテストするために使用される ngMock の単なるサービスである $controller をテストしたくありません。 https://docs.angularjs.org/api/ngMock/service/ $controller

基本的に、このサービスを使用してコントローラーを作成する必要があります。plunkr の例を作成しました。 http://plnkr.co/edit/DQZGZERfCptAlgeBUUqb?p=preview

コントローラーの名前を RegisterController1 に変更すると、テストは失敗します。これが役立つことを願っています。`

var app = angular.module('myApp',[]);
app.controller("RegisterController", function ($rootScope, $scope) {

    // Do something

});

describe('RegisterController', function() {

    var $rootScope, $scope, $controller,registerController;

    beforeEach(module('myApp'));

    beforeEach(inject(function(_$rootScope_, _$controller_){
        $rootScope = _$rootScope_;
        $scope = $rootScope.$new();
        $controller = _$controller_;

        registerController = $controller('RegisterController', {'$rootScope' : $rootScope, '$scope': $scope});
    }));

    it('should exist', function() {
        expect(registerController).toBeDefined();
    });
});

`

 <!DOCTYPE html>
<html ng-app="myApp">

  <head>
    <link data-require="jasmine@2.2.1" data-semver="2.2.1" rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.css" />
    <script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js"></script>
    <script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js"></script>
    <script data-require="jasmine@2.2.1" data-semver="2.2.1" src="http://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js"></script>
    <script data-require="angular.js@1.3.14" data-semver="1.3.14" src="https://code.angularjs.org/1.3.14/angular.js"></script>
    <script data-require="angular-mocks@1.3.14" data-semver="1.3.14" src="https://code.angularjs.org/1.3.14/angular-mocks.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <h1>Hello Plunker!</h1>
  </body>

</html>
于 2015-03-10T12:21:14.030 に答える