Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为$http使用HttpBackend_Javascript_Angularjs_Jasmine - Fatal编程技术网

Javascript 如何为$http使用HttpBackend

Javascript 如何为$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

我很难用在初始化时使用promise的控制器创建一个测试。这是我的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");
            }

    };

});

使用$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服务