嘲笑角度http请求

时间:2014-07-29 04:47:30

标签: angularjs unit-testing

我有一个视图,命中端点与另一个用户共享资源。端点看起来像:

http://mysite/api/{resource}/{Id}/transfer

这是一个PUT请求,我发送的有效负载如下:

{ destination: Id, 
data: [Ids of resources that are being transferred]
}

我不明白如何使用模拟器为api创建测试?端点本身只返回200.当我在UI中手动检查它时,我必须转到具有destinationId的页面,并查看该资源是否存在。

据我所知,你可以创建一个

when("GET", {url: url}).respond(...);

但就像我说我的服务只返回200.我真的不知道如何创建假装转移东西的模拟服务,因为如果它实际上没有转移资源,就像它在一个实际的测试环境,那么服务就不起作用了。

1 个答案:

答案 0 :(得分:0)

你可以像下面那样模拟http。 这是我的控制器:

var app = angular.module("angularModule",[]);

app.controller(“angularController”,函数($ scope,$ http){

$scope.getAddress = function () {
    $http.get("/address").success(function (data) {
        $scope.Address = data;
    });
};

$scope.saveUser = function(user) {
    $http.post("/addUser", user).success(function() {

    });
};

});

我编写单元测试以检查上述控制器Get和POST方法为:

describe("Test Angular Hello World", function () {
var scope;
var controller;
var httpBackend;
beforeEach(module("angularModule"));

beforeEach(inject(function ($rootScope, $controller, $httpBackend) {
    httpBackend = $httpBackend;
    $httpBackend.expectGET("/userName").respond("Sankalpa");
    scope = $rootScope.$new();
    controller = $controller("angularController", { $scope: scope });
    $httpBackend.flush();
}));

it("Should get user address from server", function () {
    httpBackend.expectGET("/address").respond("Horana");
    scope.getAddress();
    httpBackend.flush();

    expect(scope.Address).toEqual("Horana");
});

it("Should save user", function () {
    var user = {id:1, name:'test'};
    httpBackend.expectPOST("/addUser", user).respond(200);
    scope.saveUser(user);
    httpBackend.flush();
});

});

希望这个帮助:)