Proxyquire 不覆盖导出的函数
Proxyquire not overriding exported function
我有一个 class modules/handler.js
,看起来像这样:
const {getCompany} = require('./helper');
module.exports = class Handler {
constructor () {...}
async init(){
await getCompany(){
...
}
}
它从文件 modules/helper.js
:
中导入函数 getCompany
exports.getCompany = async () => {
// async calls
}
现在在集成测试中,我想存根 getCompany
方法,它应该只是 return 一个 mockCompany。
但是,proxyquire 并没有对方法 getCompany
进行存根,而是调用了真正的方法。
测试:
const sinon = require('sinon');
const proxyquire = require("proxyquire");
const Handler = require('../modules/handler');
describe('...', () => {
const getCompanyStub = sinon.stub();
getCompanyStub.resolves({...});
const test = proxyquire('../modules/handler.js'), {
getCompany: getCompanyStub
});
it('...', async () => {
const handler = new Handler();
await handler.init(); // <- calls real method
...
});
});
我也在没有 sinon.stub
的情况下尝试过它,其中代理需要 return 一个函数直接 returning 一个对象,但是,这也没有用。
我将非常感谢您的每一个指点。
谢谢。
您正在使用的 Handler
class 是 require
函数所必需的,而不是 proxyquire
。
handler.js
:
const { getCompany } = require('./helper');
module.exports = class Handler {
async init() {
await getCompany();
}
};
helper.js
:
exports.getCompany = async () => {
// async calls
};
handler.test.js
:
const sinon = require('sinon');
const proxyquire = require('proxyquire');
describe('69759888', () => {
it('should pass', async () => {
const getCompanyStub = sinon.stub().resolves({});
const Handler = proxyquire('./handler', {
'./helper': {
getCompany: getCompanyStub,
},
});
const handler = new Handler();
await handler.init();
});
});
测试结果:
69759888
✓ should pass (2478ms)
1 passing (2s)
------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
handler.js | 100 | 100 | 100 | 100 |
helper.js | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------
我有一个 class modules/handler.js
,看起来像这样:
const {getCompany} = require('./helper');
module.exports = class Handler {
constructor () {...}
async init(){
await getCompany(){
...
}
}
它从文件 modules/helper.js
:
getCompany
exports.getCompany = async () => {
// async calls
}
现在在集成测试中,我想存根 getCompany
方法,它应该只是 return 一个 mockCompany。
但是,proxyquire 并没有对方法 getCompany
进行存根,而是调用了真正的方法。
测试:
const sinon = require('sinon');
const proxyquire = require("proxyquire");
const Handler = require('../modules/handler');
describe('...', () => {
const getCompanyStub = sinon.stub();
getCompanyStub.resolves({...});
const test = proxyquire('../modules/handler.js'), {
getCompany: getCompanyStub
});
it('...', async () => {
const handler = new Handler();
await handler.init(); // <- calls real method
...
});
});
我也在没有 sinon.stub
的情况下尝试过它,其中代理需要 return 一个函数直接 returning 一个对象,但是,这也没有用。
我将非常感谢您的每一个指点。 谢谢。
您正在使用的 Handler
class 是 require
函数所必需的,而不是 proxyquire
。
handler.js
:
const { getCompany } = require('./helper');
module.exports = class Handler {
async init() {
await getCompany();
}
};
helper.js
:
exports.getCompany = async () => {
// async calls
};
handler.test.js
:
const sinon = require('sinon');
const proxyquire = require('proxyquire');
describe('69759888', () => {
it('should pass', async () => {
const getCompanyStub = sinon.stub().resolves({});
const Handler = proxyquire('./handler', {
'./helper': {
getCompany: getCompanyStub,
},
});
const handler = new Handler();
await handler.init();
});
});
测试结果:
69759888
✓ should pass (2478ms)
1 passing (2s)
------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
handler.js | 100 | 100 | 100 | 100 |
helper.js | 100 | 100 | 100 | 100 |
------------|---------|----------|---------|---------|-------------------