从另一个文件调用的Sinon存根方法

时间:2018-10-29 11:18:54

标签: node.js unit-testing testing sinon-chai

我正在尝试在项目中设置单元测试。为此,我使用摩卡柴和西农式的库房。我使用的是NodeJs服务器版本8。

版本:

Sinon:“ 7.1.0” 摩卡:“ 5.1.0” 柴:“ 4.2.0”

我想存根另一个文件中声明的方法。

这是一个例子:

- a.js
   exports.FnA(return FnB())
- b.js
   exports.FnB()

我想从b.js文件中存根方法FnB(),所以无论FnB()返回如何,我都可以测试FnA()。

这就是我尝试过的:

beforeEach(() => {
            this.FnBStub = sinon.stub(b, 'FnB').returns('mocked');
        });

afterEach(() => this.FnBStub.restore());

it('should mocked FnB function', () => {
            try {
                console.log(b.FnB()); //returns 'mocked'
                console.log(a.FnA()); //return error from FnB() execution ...
            } catch (e) {
                console.log(e);
            }
        });

它确实对方法FnB()进行了存根处理,但仅当我从b文件的实例调用它时才进行。因此,当我调用FnA()时,存根似乎消失了……

我想念什么?

一些帮助将不胜感激,谢谢:)

编辑

a.js示例:

const FnB = require('./FnB)

exports.FnA = data => {
    const limit = data.releases.update ? 60 : 20;
    return FnB(data.ref, limit)
};

b.js示例:

exports.FnB = (ref, page, query) => {
   //API call
}

testFile.js示例:

const a = require('../a')
const b = require('../b')

beforeEach(() => {
            this.FnBStub = sinon.stub(b, 'FnB').returns('mocked');
        });

afterEach(() => this.FnBStub.restore());

it('should mocked FnB function', () => {
            try {
                console.log(b.FnB()); //returns 'mocked'
                console.log(a.FnA()); //return error from FnB() execution ...
            } catch (e) {
                console.log(e);
            }
        });

因此,正如我所说的,我想对这个FnB调用方法进行存根,只是检查是否使用正确的参数调用了该方法。

1 个答案:

答案 0 :(得分:1)

如果要导出的模块本身是函数而不是对象的一部分,则不能直接对其进行存根。

您需要使用类似transform的名称。您的测试代码将如下所示:

const FnBstub = sinon.stub();
const proxyquire = require('proxyquire');
const a = proxyquire('../a', {
    FnB: FnBstub
});
const b = require('../b');

有关更多信息,请点击此处:proxyquire