我正在测试一些代码,但我在使用sinon时遇到了一些问题。问题是我的一个函数将函数作为参数,我还没有找到如何模拟它。
通常你会这样做:
var get = sinon.stub($, 'get')
之后使用$ .get:
sinon.assert.calledWith(get, expectedObject);
我的代码如下:
function getUsers(usersPromise) {
const config = { date: new Date() };
return usersPromise(config)
.then(function (data) {
// Do stuff
})
}
我想要做的是能够模仿用户促销。所以我会检查它是用正确的配置对象调用的(我省略了很多值)然后在.then函数中断言一些东西。
sinon.stub(usersPromise)将不起作用,所以我有点迷失。
答案 0 :(得分:0)
没有足够的信息可以为您提供完整的解决方案,但您似乎首先要为.then
var stubThen = sinon.stub();
然后为get
创建一个存根,并将stubThen
作为返回对象的属性。
var stubGet = sinon.stub();
stubGet.returns({then: stubThen});
然后在测试代码中将stubGet
传递给getUsers
并进行相应验证。
答案 1 :(得分:0)
我想做的是能够模仿用户促销。
遵守TDD的结果之一是它会强制您在隔离的可测试块中构建代码。这是因为您无法对函数的各个行或传递给它的参数执行测试。在您的情况下,解决方案是以这种方式构建您的代码:
var usersPromise = function(){};
function getUsers(usersPromise) {};
现在您已将usersPromise
作为一个可以测试的隔离块,包括在调用getUsers
之前将其删除。