正如我在上一个关于嘲弄的问题中提到的,我对Jest和测试很陌生,而且我似乎得到了一些曲线球。
这一次,我在我的CLI应用程序中无法模拟shelljs。
自动锁定jest.mock('shelljs');没有工作,错误为:TypeError: shell.exec不是一个函数
所以我继续尝试使用mockImplementation()
jest.mock('shelljs', () => {
return jest.fn().mockImplementation(() => {
return {
exec: () => {}
};
});
});令我惊讶的是,我仍然收到同样的错误信息。
任何指针都会受到很大的赞赏。
更新08/04/2020
根据特内夫下面的答复,嘲弄的效果很好:
jest.mock('shelljs', () => {
return {
exec: jest.fn()
};
});现在我得到了超时,因为我对shell.exec()的调用是异步的,并且有一个回调来解决我的承诺。
我的目标是模拟shell.exec()来解决承诺,但是它会进入等待和Jest超时。
发布于 2020-04-07 08:31:00
当您使用shell作为一个具有.exec属性的对象时,您的jest.mock工厂函数应该返回一个具有exec属性的对象
jest.mock('shelljs', () => {
return { exec: jest.fn() }
});发布于 2020-04-08 10:32:07
在Teneff的回答中,我意识到超时是会发生的,因为我成功地模拟了shell.exec,但是我使用了异步版本的exec(command [, options] [, callback]),所以我首先尝试注销参数,结果成功了。
只剩下打电话给我,瞧,我的测试成功了。
jest.mock('shelljs', () => {
return {
exec: jest.fn((_, __, callback) => callback())
};
});发布于 2020-10-30 11:10:34
Teneff answer为我工作。但是,当我想模拟不同的shell响应时,我对它做了这样的改进:
const shelljs = require('shelljs');
jest.mock('shelljs');
describe('Run the test suite', () => {
test('it should ...', async () => {
shelljs.exec = jest.fn().mockImplementation(() => ({ code: 0 }));
...
expect(...);
});
test('it should ...', async () => {
shelljs.exec = jest.fn().mockImplementation(() => ({ code: 1 }));
...
expect(...);
});
});https://stackoverflow.com/questions/61075068
复制相似问题