如何使用HttpBackend为$ http

时间:2016-03-21 03:05:52

标签: javascript angularjs jasmine

我很难用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");
            }

    };

});

1 个答案:

答案 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块。