如何使用 Sinon 模拟自定义 $http 转换
How to Mock a Custom $http Transform with Sinon
尝试了解使用 Sinon 模拟框架在 Angular 中使用自定义转换模拟 http post 的正确方法。
我在 CoffeeScript Sinon 单元测试中设置模拟如下:
beforeEach module(($provide) ->
mockHttp = {}
$provide.value('$http', mockHttp))
我断言这是用
调用的
expect(mockHttp.post).to.have.been.calledWith('/api/v1/something/' + id)
根据 Sinon 的文档,模拟标准 get 或 post 转换的方法调用如下所示:
mockHttp.post.returns(q.when({}))
这应该是指"when you call the post, then return a promise with an empty object"。
该模拟设置适用于 JavaScript 被测代码,如下所示:
service.create = function(arg) {
return $http.post('/api/v1/something/' + arg {token: token }).then(
function(response) {
return response.data;
}
);
};
但是你如何处理在你说“$http.post”的那一行没有被调用的方法,而是你有:
service.customPostback = function(arg1) {
return service.doSomething(arg1).then(
function(response) {
return $http.post(
'http://mypostback.url',
{
"name":"value"
}
).then(function(response) {
return response.data;
});
}
);
};
有关 Angular 中的相关信息,请参阅 Overriding the Default Transformations Per Request
我的模拟设置不足以涵盖 doSomething(arg1) 内部的回调。
当我 运行 我的测试时,我发现 mockHttp.post 没有被调用。
这个 JavaScript 函数的正确模拟设置是什么样的?
这个模拟设置起作用了:
mockHttp.post.withArgs('/api/v1/something/' + someId + '/dosomething').returns(q.when({ data: somedata }))
然后这个自定义期望与 Sinon 匹配:
expect(mockHttp.post).to.have.been.calledWith(
doSomething.url,
{
param1: 'value1',
param2: 'value2'
},
sinon.match({ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }))
尝试了解使用 Sinon 模拟框架在 Angular 中使用自定义转换模拟 http post 的正确方法。
我在 CoffeeScript Sinon 单元测试中设置模拟如下:
beforeEach module(($provide) ->
mockHttp = {}
$provide.value('$http', mockHttp))
我断言这是用
调用的expect(mockHttp.post).to.have.been.calledWith('/api/v1/something/' + id)
根据 Sinon 的文档,模拟标准 get 或 post 转换的方法调用如下所示:
mockHttp.post.returns(q.when({}))
这应该是指"when you call the post, then return a promise with an empty object"。
该模拟设置适用于 JavaScript 被测代码,如下所示:
service.create = function(arg) {
return $http.post('/api/v1/something/' + arg {token: token }).then(
function(response) {
return response.data;
}
);
};
但是你如何处理在你说“$http.post”的那一行没有被调用的方法,而是你有:
service.customPostback = function(arg1) {
return service.doSomething(arg1).then(
function(response) {
return $http.post(
'http://mypostback.url',
{
"name":"value"
}
).then(function(response) {
return response.data;
});
}
);
};
有关 Angular 中的相关信息,请参阅 Overriding the Default Transformations Per Request
我的模拟设置不足以涵盖 doSomething(arg1) 内部的回调。 当我 运行 我的测试时,我发现 mockHttp.post 没有被调用。
这个 JavaScript 函数的正确模拟设置是什么样的?
这个模拟设置起作用了:
mockHttp.post.withArgs('/api/v1/something/' + someId + '/dosomething').returns(q.when({ data: somedata }))
然后这个自定义期望与 Sinon 匹配:
expect(mockHttp.post).to.have.been.calledWith(
doSomething.url,
{
param1: 'value1',
param2: 'value2'
},
sinon.match({ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }))