私はそのような AngularJS コントローラーを持っています:
app.controller('MyCtrl', function($scope, myFactory){
$scope.types = myFactory.getTypes();
$scope.model= {};
$scope.model.type = $scope.types[0].type;
});
});
すべて正常に動作します。
しかし、Jasmine でこのコントローラーをテストしたいと思います。だから私はそのようにモックmyFactory
して初期化しますmyCtrl
:
describe('Controllers: MyCtrl', function () {
var MyCtrl, mockedFactory, scope;
beforeEach(module('app.factories', function ($provide) {
mockedFactory = {
getTypes: function(){}
};
spyOn(mockedFactory, 'getTypes');
$provide.value('myFactory', mockedFactory);
}));
beforeEach(module('app'));
beforeEach(inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
MyCtrl= $controller('MyCtrl', {
$scope: scope
});
}));
it('should call AccordTypeFactory.getAvailableTypes()', function () {
scope.types;
expect(mockedFactory.getTypes).toHaveBeenCalled();
});
しかし、私は論理的なバグを持っています:Cannot read property 0 of undefined
私はこのバグを理解しています。ファクトリをモックするため、コントローラー$scope.model.type
のプロパティは定義されていません。これは、ファクトリの結果を使用するためです$scope.types
。
私の質問は簡単です: どうすればテストを機能させることができますか?
ありがとう