如何使用sinon在被测函数中存根类方法?

时间:2017-06-16 20:36:49

标签: javascript sinon jestjs

   //Some utility 
   import SomeClass from 'someclass';

   const LoadService = {

     getData(){
     const someClassInstance = new SomeClass('param1', 'param2');
     return someClassInstance.load('param33')
     },

   };

  module.exports =LoadService;

打算通过模拟SomeClass测试LoadService,因为SomeClass已经过测试。 我使用sinon 2.1.0

我想检查LoadService的getData方法。是否可以模拟load的{​​{1}}类方法。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

首先,您必须模拟someClass模块,以便它返回一个开玩笑的间谍并将此模块导入您的测试。

import SomeClass from 'someClass'
jest.mock('someclass', ()=>jest.fn())

然后你需要为load函数和模块本身创建间谍。

const load = jest.fn()
SomeClass.mockImplementation(jest.fn(()=>({load})))

调用LoadService后,您可以检查模块本身和load函数是否被调用

expect(someClassMock).toHaveBeenCalledWith('param1', 'param2')
expect(load).toHaveBeenCalledWith('param33')

因此毕竟没有必要使用Sinon,所有事情都可以使用Jest

完成