在angularjs控制器的jasmine单元测试中,我做错了什么?
我是angularjs新手,正在为一个简单的控制器编写单元测试。但不知何故,它不起作用。守则如下: resetpwdtrl.js(只提到了我正在测试的功能) “Employee”是工厂,sendResetPwdLink是静态方法。它的单元测试是在angularjs控制器的jasmine单元测试中,我做错了什么?,angularjs,jasmine,Angularjs,Jasmine,我是angularjs新手,正在为一个简单的控制器编写单元测试。但不知何故,它不起作用。守则如下: resetpwdtrl.js(只提到了我正在测试的功能) “Employee”是工厂,sendResetPwdLink是静态方法。它的单元测试是 describe("Reset pwd", function() { var scope, mockModalInstance, mockEmployee, emp, q, deferred, appCtrl; beforeEach(function(
describe("Reset pwd", function() {
var scope, mockModalInstance, mockEmployee, emp, q, deferred, appCtrl;
beforeEach(function() {
mockEmployee = {
id : 0,
sendResetPwdLink : function(theId) {
mockEmployee.id = theId;
deferred = q.defer();
deferred.promise.success = function(fn) {
return deferred.promise.then(fn);
};
//return deferred.promise;
deferred.promise.error = function(fn) {
return deferred.promise.fail(fn);
};
return deferred.promise;
}
};
emp = {
id : 10
};
mockModalInstance = {
isClosed : false,
close : function() {
mockModalInstance.isClosed = true
}
};
});
beforeEach(inject(function($controller, $rootScope, $q) {
scope = $rootScope.$new();
q = $q;
$controller('ResetPwdCtrl', {
'$scope' : scope,
'$modalInstance' : mockModalInstance,
'Employee' : mockEmployee,
'emp' : emp
});
}));
it("confirm", function() {
scope.confirm();
deferred.resolve();
scope.$root.$digest();
expect(mockModalInstance.isClosed).toEqual(true);
});
it("confirm2", function() {
scope.confirm();
deferred.reject({errorObject:[{type: 'danger', statusCode: 401,text: statusCode}]});
scope.$root.$digest();
});
});
运行测试时,我遇到以下错误:
重置pwd it确认
如果scope.alert.type未定义,请声明JSON对象
希望这篇文章能帮助你我会尝试两件事。可能未定义
q
。您可以尝试将mockEmployee定义之前的更改为此
beforeEach(inject(function($q) { //ADD INJECT
q = $q //DEFINE q
mockEmployee = {...//This part looks good to me
如果这没有帮助,这就是我在测试中使用q的方式。希望它能引导你走上正确的轨道
getData = {
get: function (id)
{
deferred = q.defer();
// Place the fake return object here
deferred.resolve(mockEmployee);
return { $promise: deferred.promise };
}
};
$rootScope.$apply();
谢谢你的回复,这确实帮了我很大的忙:)
我检查了我正在写的错误情况
deferred.promise.error = function (fn) {
return deferred.promise.fail(fn);
};
相反,我添加了以下代码来检查错误条件
deferred.promise.error = function (fn) {
deferred.promise.then(null, fn);
return deferred.promise;
};
这个很好用
deferred.promise.error = function (fn) {
return deferred.promise.fail(fn);
};
deferred.promise.error = function (fn) {
deferred.promise.then(null, fn);
return deferred.promise;
};