2
私はJasmineとKarmaでBDDを学んでいます。John Papaのコントローラがデータサービスを呼び出すのを確認する
私はJohn Papa's style guideに従っていますが、私のコードをテストするのにはいくつかの困難があります。
describe("avengers controller", function() {
var controller, avengers;
beforeEach(function() {
module('app');
});
beforeEach(inject(function(_$rootScope_, _$controller_, _$q_, _dataservice_) {
dataserviceMock = _dataservice_;
controller = _$controller_;
vm = controller("AvengerController", { dataservice: dataserviceMock });
$q = _$q_;
rootScope = _$rootScope_;
avengers = [{"id": 1}, {"id": 2}];
}));
it('should be created successfully', function() {
expect(vm).toBeDefined();
});
it('should have called `dataservice.getAvengers`', function() {
spyOn(dataserviceMock, 'getAvengers').and.callFake(function(){
var deferred = $q.defer();
return deferred.promise;
});
vm.getAvengers();
expect(dataserviceMock.getAvengers).toHaveBeenCalledTimes(1);
});
// What I'm trying to test
// Test 1
it('should have Avengers', function() {
spyOn(dataserviceMock, 'getAvengers').and.callFake(function(){
var deferred = $q.defer();
deferred.resolve([{"id": 1}, {"id": 2}]);
return deferred.promise;
);
vm.getAvengers();
expect(vm.avengers.length).toEqual(avengers.length);
});
// Test 2
it('should have Avengers', function() {
spyOn(dataserviceMock, 'getAvengers').and.returnValue(avengers);
vm.getAvengers();
expect(vm.avengers.length).toEqual(avengers.length);
});
});
:私はこれらのテストを行った
function dataservice($http) {
return {
getAvengers: getAvengers
};
function getAvengers() {
return $http.get('/api/maa')
.then(getAvengersComplete)
.catch(getAvengersFailed);
function getAvengersComplete(response) {
return response.data.results;
}
function getAvengersFailed(error) {
// Fail
}
}
}
:この工場では
function getAvengers() {
return dataservice.getAvengers()
.then(function(data) {
vm.avengers = data;
return vm.avengers;
});
}
:
私は(ジョン・パパのガイドから)コントローラ機能のこの種をテストしたいです
私は2つの異なる方法を試みましたが、うまくいかなかったため、そのテスト方法を理解できませんでした。avengerController.getAvengers()def戻り値のデータと等しいines vm.avengersは工場呼び出しからの恩人です。
作業していないものを詳しく教えてください。それは約束のためにテストが 'アベンジャーズを持つべきか? – war1oc
テスト1は "expected 0 to equal 2"を返し、テスト2は "undefinedはコンストラクタではありません(dataservice.getAvengers()、then(getAvengersComplete) ')")を返します。 –