[英]how to mock nested module response in Node.js/Jest
我想在从另一个组件调用的组件的方法中抛出和错误,而不是我正在测试
// Class1.js
class Class1 {
getData() {
return { data }
}
}
module.exports = new Class1()
// Class2.js
class1 = require('./Class1')
class Class2 {
getData() {
try {
let data = class1.getData()
return { data }
} catch (err) {
return err
}
}
}
module.exports = new Class2()
// Class2.spec.js
const class1 = require('./Class1')
const class2 = require('./Class2')
test("Test Class2 catch block", () => {
jest.spyOn(class1, 'getData').mockReturnValue(new Error("Error"))
expect(class2.getData()).toEqual(Error("Error"));
})
但是 jest.spyOn 没有捕获并抛出一个新的错误。我做错了什么? 我需要在 Class2 中测试 catch 块
单元测试解决方案:
class1.js
:
class Class1 {
getData() {
return { data };
}
}
module.exports = new Class1();
class2.js
:
const class1 = require('./class1');
class Class2 {
getData() {
try {
let data = class1.getData();
return { data };
} catch (err) {
return err;
}
}
}
module.exports = new Class2();
class2.test.js
:
const class1 = require('./class1');
const class2 = require('./class2');
describe('65258975', () => {
afterEach(() => {
jest.restoreAllMocks();
});
test('Test Class2 catch block', () => {
const getDataSpy = jest.spyOn(class1, 'getData').mockImplementationOnce(() => {
throw new Error('Error');
});
const actual = class2.getData();
expect(actual).toBeInstanceOf(Error);
expect(actual.message).toEqual('Error');
expect(getDataSpy).toBeCalledTimes(1);
});
test('should pass', () => {
const getDataSpy = jest.spyOn(class1, 'getData').mockReturnValueOnce('teresa teng');
const actual = class2.getData();
expect(actual).toEqual({ data: 'teresa teng' });
expect(getDataSpy).toBeCalledTimes(1);
});
});
单元测试结果:
PASS examples/65258975/class2.test.js
65258975
✓ Test Class2 catch block (3 ms)
✓ should pass
-----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------|---------|----------|---------|---------|-------------------
All files | 87.5 | 100 | 50 | 87.5 |
class1.js | 50 | 100 | 0 | 50 | 3
class2.js | 100 | 100 | 100 | 100 |
-----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 5.976 s
源代码: https://github.com/mrdulin/jest-v26-codelab/tree/main/examples/65258975
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.