使用ngResource模拟PUT请求

时间:2013-09-06 12:34:10

标签: angularjs mocking jasmine ngresource

User资源的声明类似于:

factory('User', function($resource) {
    return $resource('/api/user/:userId.json', {}, {
        put: {method:'PUT', params: {userId:'@id'}},
    });
})

正如您所看到的,PUT方法的-default-参数是资源中的id属性。

如果您想测试:

httpBackend.expectPUT('api/user/1.json').respond(200);
userResource.put();
httpBackend.flush();

我一直在测试中失败,因为它生成的实际URL是:'api / user / .json'。 id属性未包含在URL中。

这是有道理的,因为我没有为模拟对象指定id属性,我没有,因为我不知道该怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:3)

路径应以'/'开头,您需要传入ID以使路径与代码中生成的路径匹配。 URL匹配是字符串匹配,因此您需要保证您希望命中的URL与生成的URL完全相同。

httpBackend.expectPUT('/api/user/1.json').respond(200);
userResource.put({id:1});
httpBackend.flush();