2016-11-28 74 views
0

我正在测试一些代码,但我在使用sinon时遇到了一些麻烦。事情是,我的一个函数将函数作为参数,我还没有找到如何嘲笑它。测试一个函数的函数参数

通常你是这样的:在以后使用后

var get = sinon.stub($, 'get') 

然后$不用彷徨:

sinon.assert.calledWith(get, expectedObject); 

我的代码如下:

function getUsers(usersPromise) { 
    const config = { date: new Date() }; 
    return usersPromise(config) 
     .then(function (data) { 
      // Do stuff 
     }) 
} 

我想什么做的是能够嘲笑usersPromise。所以我会检查它是否被正确的配置对象调用(我省略了很多值),然后在.then函数中声明一些东西。

sinon.stub(usersPromise)将不起作用,所以我有点失落。

回答

0

有没有足够的信息给你一个完整的解决方案,但好像你首先要创建一个存根.then

var stubThen = sinon.stub(); 

然后为get创建一个存根,并有stubThen作为返回对象的属性。

var stubGet = sinon.stub(); 
stubGet.returns({then: stubThen}); 

然后在你测试代码通stubGet到,并相应确认。

0

我想要做的是能够模拟usersPromise。

坚持TDD的结果之一是它迫使你在隔离的可测试块中构建代码。这是一个事实的直接结果,你不能对传递给它的函数或参数的各行进行测试。你的情况的解决方案是构建你的代码是这样的:

var usersPromise = function(){}; 
function getUsers(usersPromise) {}; 

现在你已经usersPromise一个孤立的模块,你可以测试包括呼叫前磕碰出来。

+0

我已经这样做了。问题是我需要在getUsers中声明一些东西(也就是说选项对象中的内容),我认为最好只是对该参数进行存根并查看它所调用的内容。 – kjonsson

+0

@kjonsson:你需要在'getUsers'中声明什么?请包括在你的问题。 – rabbitco