我很难用Controller在初始化时使用promise创建一个Test。这是我的angularjs scirpt。
Javascript.js
var appModule = angular.module('appModule', []);
appModule.controller('c0001Controller', function($http, $window) {
var user = {};
this.c0001Data = user;
this.submitForm = function() {
if(!angular.isUndefined(this.c0001Data.user_id) && !angular.isUndefined(this.c0001Data.password))
{
var promise = $http.post('C0001Login', user);
promise.success(function(data, status, headers, config) {
if(data.message == 'error'){
alert('Invalid Username/Password');
} else {
$window.location.href = data.url + "#/c0003";
}
});
promise.error(function(data, status, headers, config) {
alert("Invalid Username/Password");
});
}
else {
alert ("Invalid/ Username/password");
}
};
});
答案 0 :(得分:1)
使用$ httpBackend更像是设置一个假电话来拦截测试用例中$ http服务的原始呼叫。
在你的控制器/服务中说你有一个$ http get来自请求网址' api / employees'。在您的测试中,您希望在实际调用函数调用$ http:
之前执行此类操作$httpBackend.expectGET('api/employees').and.return(200, [
{ id: 1, name: 'sample' },
{ id: 2, name: 'sample 2' }
]);
(JasmineJS)通过这种方式,原始的$ http获取请求到您的网址' api / employees'将不会调用$ httpBackend的设置/预期调用,并且将返回http状态代码200以及数组数据。
这对于期望具有数据参数的POST很有效。您应该始终知道原始$ http调用中使用的请求网址,数据和其他配置。
P.S。使用$ httpBackend时始终返回适当的HTTP状态代码。比如说,返回HTTP状态代码400将触发您正在测试的代码中的catch块。