如何模拟导入的数组并测试使用函数
How to mock an imported array and test the using Function
我正在导出数组:
//constants.js
export const myarray = ['apples', 'oranges', 'pears'];
//checkFunction.js
import myarray from ./constants
function check(value) {
return myarray.includes(value);
}
我希望能够在我的测试套件中模拟数组,以便我可以针对不同的测试控制它的值。
我的问题是,使用 Mocha & Sinon,我如何测试函数 check()
并模拟导入的数组 myarray
。
如果我为 check()
创建一个存根,我如何让它使用模拟的 myarray
?
sinon.stub(checkFunction, 'checkFunction')
你正在测试 check
函数,你不应该存根它。就像你说的,你应该在测试用例中模拟 myarray
。您可以在 checkFunction.js
模块的 require
/import
之前改变 myarray
的值。确保在 运行 每个测试用例之前清除模块缓存,以便后续导入 constants
模块会给你一个新鲜的 myarray
,而不是变异的。
例如
constants.js
:
export const myarray = ['apples', 'oranges', 'pears'];
checkFunction.js
:
import { myarray } from './constants';
export function check(value) {
console.log('myarray: ', myarray);
return myarray.includes(value);
}
checkFunction.test.js
:
import { expect } from 'chai';
describe('72411318', () => {
beforeEach(() => {
delete require.cache[require.resolve('./checkFunction')];
delete require.cache[require.resolve('./constants')];
});
it('should pass', () => {
const { myarray } = require('./constants');
myarray.splice(0, myarray.length);
myarray.push('beef', 'lobster');
const { check } = require('./checkFunction');
expect(check('apples')).to.be.false;
});
it('should pass 2', () => {
const { check } = require('./checkFunction');
expect(check('apples')).to.be.true;
});
});
测试结果:
72411318
myarray: [ 'beef', 'lobster' ]
✓ should pass (194ms)
myarray: [ 'apples', 'oranges', 'pears' ]
✓ should pass 2
2 passing (204ms)
我正在导出数组:
//constants.js
export const myarray = ['apples', 'oranges', 'pears'];
//checkFunction.js
import myarray from ./constants
function check(value) {
return myarray.includes(value);
}
我希望能够在我的测试套件中模拟数组,以便我可以针对不同的测试控制它的值。
我的问题是,使用 Mocha & Sinon,我如何测试函数 check()
并模拟导入的数组 myarray
。
如果我为 check()
创建一个存根,我如何让它使用模拟的 myarray
?
sinon.stub(checkFunction, 'checkFunction')
你正在测试 check
函数,你不应该存根它。就像你说的,你应该在测试用例中模拟 myarray
。您可以在 checkFunction.js
模块的 require
/import
之前改变 myarray
的值。确保在 运行 每个测试用例之前清除模块缓存,以便后续导入 constants
模块会给你一个新鲜的 myarray
,而不是变异的。
例如
constants.js
:
export const myarray = ['apples', 'oranges', 'pears'];
checkFunction.js
:
import { myarray } from './constants';
export function check(value) {
console.log('myarray: ', myarray);
return myarray.includes(value);
}
checkFunction.test.js
:
import { expect } from 'chai';
describe('72411318', () => {
beforeEach(() => {
delete require.cache[require.resolve('./checkFunction')];
delete require.cache[require.resolve('./constants')];
});
it('should pass', () => {
const { myarray } = require('./constants');
myarray.splice(0, myarray.length);
myarray.push('beef', 'lobster');
const { check } = require('./checkFunction');
expect(check('apples')).to.be.false;
});
it('should pass 2', () => {
const { check } = require('./checkFunction');
expect(check('apples')).to.be.true;
});
});
测试结果:
72411318
myarray: [ 'beef', 'lobster' ]
✓ should pass (194ms)
myarray: [ 'apples', 'oranges', 'pears' ]
✓ should pass 2
2 passing (204ms)