Javascript 如何为$http使用HttpBackend
我很难用在初始化时使用promise的控制器创建一个测试。这是我的angularjs scirpt Javascript.jsJavascript 如何为$http使用HttpBackend,javascript,angularjs,jasmine,Javascript,Angularjs,Jasmine,我很难用在初始化时使用promise的控制器创建一个测试。这是我的angularjs scirpt Javascript.js var appModule = angular.module('appModule', []); appModule.controller('c0001Controller', function($http, $window) { var user = {}; this.c0001Data = user; this.submitForm
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");
}
};
});
使用$httpBackend更像是在测试用例中设置一个假调用来拦截$http服务的原始调用 假设您在控制器/服务中有一个从请求url“api/employees”获取的$http get。在测试中,您希望在实际调用调用$http的函数之前执行以下操作:
$httpBackend.expectGET('api/employees').and.return(200, [
{ id: 1, name: 'sample' },
{ id: 2, name: 'sample 2' }
]);
(JasmineJS)通过这种方式,将不会调用对url“api/employees”的原始$http get请求,而是调用$httpBackend的设置/预期调用,并返回http状态码200以及阵列数据
这对于期望一篇带有数据参数的文章很有效。您应该始终知道原始$http调用中使用的请求url、数据和其他配置
注意:使用$httpBackend时,始终返回适当的HTTP状态代码。比方说,返回HTTP状态代码400将触发正在测试的代码中的catch块 没有看到任何基于承诺的初始化代码。它在哪里?为了测试您的
submitForm
方法,请使用ngMock
模块中的$httpBackend
。哦,对不起,我发布了一个错误的问题,应该是“如何使用httpBackend For the$http”,我将编辑我的帖子。那么问题是什么?文档在这里~感谢Phil的快速响应,顺便说一句,你能给出更多关于如何在ngMock中执行$httpbackend的示例吗?。这让我感到困惑。我是一名新的Jasmine测试人员,但如果我没有指定请求URL怎么办?相反,我只有基于js的“C0001Login”。传递到原始$http调用的任何参数必须在$httpBackend上的expectGET/expectPOST等上完全镜像,这将非常有效!我明白了,我将首先尝试创建测试,然后尝试HttPbackend。感谢manIn jasmine,您可以使用beforeach函数设置所有$httpBackend期望值。别忘了调用$httpBackend.flush();在每次测试中,您都使用$httpBackend服务