Я использую AngularJS, Karma, Mocha, Chai, Chai-as-promise, Sinon.
Я пробую контроллер ниже. У меня возникли проблемы с издевательством над пользователем службы и тестированием разделов .then() в контроллере.
Код контроллера
.controller('SignupPhoneCtrl', function(User, $scope) {
$scope.sendPhoneNumber = function(countryCode, phoneNumber){
User.sendPhoneNumber(countryCode, phoneNumber)
.then(function(result){
if(result == "success"){
//I WANT TO TEST THIS SECTION
return "success";
}
//I WANT TO TEST THIS SECTION
return "fail";
});
}
})
Код проверки контроллера
describe('Controller: Signup-phone', function() {
var scope;
var UserMock;
var SignupPhoneCtrl;
beforeEach(function() {
module('starter.controllers');
});
beforeEach(inject(function($rootScope, $controller, $q){
scope = $rootScope.$new();
UserMock = {
sendPhoneNumber: function(countryCode, phoneNumber){
var deferred = $q.defer();
// console.log("called"); //This part is being called
deferred.resolve('foo');
return deferred.promise;
}
};
SignupPhoneCtrl = $controller("SignupPhoneCtrl", {$scope: scope, User: UserMock});
}))
it('should return asdf', function(){
scope.$digest();
//WHAT SHOULD I WRITE HERE?
})
});
Я попробовал следующее, но часть утверждения не вызывается.
scope.sendPhoneNumber(12, 53452123).then(function(result){
result.should.equal("fail"); //THIS SECTION IS NOT CALLED
})
Я пробовал следующее, но выдает ошибку: «undefined» не является функцией (оценка «promise.then.bind (обещание)»
scope.sendPhoneNumber(12, 53452123).should.eventually.equal("fail");
sendPhoneNumber(12, 53452123)
возвращает Object{$$state: Object{status: 0}}
Я пытался добавить sinon.spy(UserMock, 'sendPhoneNumber')
, но это не имеет значения.