• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

AngularJS + Jasmine模拟单元测试POST方法的$ http工厂

用户头像
it1352
帮助1

问题说明

如果使用post方法,如何对$ http工厂进行单元测试,例如:

How I can make unit-test of $http factory, if it using post method, for example:

// controller

  $scope.logOut = function (){
    logOutFactory.logOut().then(function(resp){
    });
  };


// service 

app.factory('logOutFactory', ['$http', '$q', 'CONST', function ($http, $q, CONST){
    var logoutApiUrl = CONST.URL 'logout';
    return {
        logOut: function() {
            var deferred = $q.defer();
                $http({
                    method: "post",
                    url: logoutApiUrl
                })
                .success(function (data) {
                    deferred.resolve(data);
                })
                .error(function (data) {
                deferred.reject('error in $http request');
                console.log(data, status, headers, config);
                });
            return deferred.promise;
        }
    }
}]);

// unit test

describe("myApp", function () {
 
beforeEach(module('app'));
describe("Ctrl", function () {
    var scope, httpBackend, fakedMainResponse;


    beforeEach(inject(function ($rootScope, $controller, $httpBackend, $http) {
        scope = $rootScope.$new();
        httpBackend = $httpBackend;
        httpBackend.expectPOST('https://url/logout').respond(200);
        $controller('Ctrl', {
            $scope: scope,
            $http: $http
        });
    }));
 
    it("success response - empty array from server", function () {
       //httpBackend.flush();
    });
});
});

我如何在茉莉花测试中模拟$ http响应??? 我正在尝试,但是我看到一个错误错误:意外请求:POST/url/logout 预计不会有更多请求 "

How i can mock $http response in Jasmine test ??? I'm trying but i see an error "Error: Unexpected request: POST /url/logout No more request expected "

正确答案

#1

您想为$ http工厂编写一个单元测试,但是在您的测试中,里面有一个$ controller.也许您应该将此测试分为2个单元测试,一个用于控制器,一个用于工厂.

You want to write a unit-test for the $http factory, but in your test, there is a $controller inside. Maybe you should separate this test to 2 unit-tests, one for the controller, one for the factory.

在测试logOutFactory时,您应该创建一个$ httpBackend来模拟后端,以及 logOutFactory .

When you test the logOutFactory, you should create a $httpBackend for mocking the back end, and also logOutFactory.

var logOutFactory, httpBackend;

beforeEach中,只需初始化这两个变量:

In the beforeEach, it just need to initialize these 2 variables :

beforeeach(inject(function($httpBackend, logOutFactory) {
    httpBackend = $httpBackend;
    logOutFactory = logOutFactory;
}));

然后在测试方法中模拟httpBackend:

And mock the httpBackend in the test method :

it("success response - empty array from server", function () {
    httpBackend.expectPOST('https://url/logout').respond(200);
    var success;
    // call logOut
    logOutFactory.logOut().then(function () {
        success = true;
    });        
    httpBackend.flush();
    // verification
    expect(succeeded).to.be.true;
});

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /reply/detail/tanhchbbfe
系列文章
更多 icon
同类精品
更多 icon
继续加载