2017-10-28 163 views
0

鉴于这两个函数测试该函数被调用,参数在无极

function func1() { 
    return new Promise((resolve, reject) => { 
    return resolve({ 
     method: function(variable) { 
     return variable 
     } 
    }) 
    }) 
} 

function func2() { 
    return new Promise((resolve, reject) => { 
    func1() 
    .then(obj => { 
     return resolve(obj.method('stuff')) 
    }) 
    }) 
} 

注:它们都处于一个独立的模块,与func2 require'ing /进口func1

我我想知道我应该怎么坚持func2解决obj.method()stuff作为论点。我正在考虑使用sinonJS对它进行保存,但是我不知道如何去修改它(因为我不能真正需要/导入obj方法来存储我的单元测试文件)。

我的可用测试套件是Mocha/Chai/Sinon,但是如果它可以用其他方式进行操作,那么这些并不是一个严格的要求。

+0

摩卡的文档,对如何测试异步功能一整节 - http://mochajs.org/#asynchronous-code – TheF1rstPancake

+0

这是事实,但这不是问题。我的问题是如何去测试/断言一个对象的方法,只存在于一个模块的内部函数中,用一个特定的参数来调用。通常情况下,我只是用sinon.stub(obj,'method')存根,使用sinonJS,但是我很难看到这里应该如何完成。 – MadsRC

回答

0

轻微的解决方法,但你应该能够做到以下几点。

import * as functions from './func1'; 

const obj = { 
    method: sinon.spy() 
}; 

sinon.stub(functions, 'func1') 
    .returns(new Promise(obj)); 

expect(obj.method).to.have.been.calledWith('stuff'); // sinon-chai expectation 
相关问题