测试作为函数的函数参数

时间:2016-11-28 21:07:41

标签: javascript testing mocha sinon

我正在测试一些代码,但我在使用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)将不起作用,所以我有点迷失。

2 个答案:

答案 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之前将其删除。