我有一个非对象函数
在getConfig.js上
export default function () {
/** do something **/
return {
appConfig: { status: true }
}
}
并且在我的主文件下
import getConfig from './getConfig';
export default function() {
const { appConfig } = getConfig();
if(appConfig.status) {
console.log("do the right thing");
else {
console.log("do other things")
}
}
}
如何使用sinon存根或模拟方法模拟getConfig函数?还是有更好的方法将appConfig.status属性设置为true或false?
我想执行以下操作,但不起作用
import getConfig from './getConfig';
import main from './main';
test('should status to be true', () => {
sinon.stub(getConfig).callsFake(sinon.fake.returns({status:true});
expect(main()).toBe('to do the right thing')
}
getConfig
函数仅返回一个对象,因此您只需要检查返回的值(该对象。)根本不需要sinon。您需要做的是声明返回值。您可以使用mocha
测试运行程序来运行测试,并可以使用断言工具(例如节点的内部mocha
模块进行断言)。“是否有更好的方法将appConfig.status属性设置为true或false?”如何在函数中添加参数?
assert
测试(有关设置环境,请参见// using default values for properties export default function(status = true) { // no need for additional `appConfig` property return { status }; }
手册):
mocha
import getConfig from './getConfig';
import assert from 'assert';
describe('getConfig', function() {
it('should return { status: true } by default', function() {
const ret = getConfig();
assert.deepEqual(ret, { status: true });
});
it('should return { status: false } by passing `false`', function() {
const ret = getConfig(false);
assert.deepEqual(ret, { status: false });
});
});
所以解决方案看起来像jest.mock('./getConfig', () => ( jest.fn() .mockReturnValueOnce({ appConfig: { status: true }}) .mockReturnValueOnce({ appConfig: { status: false }}) )) //The getConfig get replaced with the above mock function