Ada*_*m S 4 javascript unit-testing method-chaining jestjs
我有一个非常复杂的对象,我用它来模拟 DataTable() 对象以进行测试。
const obj = {
DataTable: () => {
return {
columns: () => {
return {
data: () => {
return {
eq: () => {
return {
indexOf: jest.fn(),
};
},
};
},
visible: () => {
return jest.fn();
},
};
},
};
},
};
Run Code Online (Sandbox Code Playgroud)
在我的测试代码中,我试图监视其中一些函数,但它总是返回未定义。有没有办法模拟深层嵌套函数的返回值?
jest.spyOn(obj.DataTable().columns().data().eq(), 'indexOf').mockReturnValue('test');
console.log(obj.DataTable().columns().data().eq().indexOf()); // returns undefined, should return 'test'
Run Code Online (Sandbox Code Playgroud)
sli*_*wp2 10
这是单元测试解决方案:
\n\nindex.ts:
import { obj } from \'./obj\';\n\nexport function main() {\n return obj.DataTable().columns().data().eq().indexOf();\n}\nRun Code Online (Sandbox Code Playgroud)\n\nobj.ts:
export const obj = {\n DataTable: () => {\n return {\n columns: () => {\n return {\n data: () => {\n return {\n eq: () => {\n return {\n indexOf: () => \'real data\',\n };\n },\n };\n },\n };\n },\n };\n },\n};\nRun Code Online (Sandbox Code Playgroud)\n\nindex.test.ts:
import { main } from \'./\';\nimport { obj } from \'./obj\';\n\ndescribe(\'61396089\', () => {\n afterEach(() => {\n jest.restoreAllMocks();\n });\n it(\'should pass\', () => {\n const mockDataTable = {\n columns: jest.fn().mockReturnThis(),\n data: jest.fn().mockReturnThis(),\n eq: jest.fn().mockReturnThis(),\n indexOf: jest.fn().mockReturnValueOnce(\'fake data\'),\n };\n jest.spyOn(obj, \'DataTable\').mockImplementationOnce(() => mockDataTable);\n const actual = main();\n expect(actual).toBe(\'fake data\');\n expect(mockDataTable.columns).toBeCalledTimes(1);\n expect(mockDataTable.data).toBeCalledTimes(1);\n expect(mockDataTable.eq).toBeCalledTimes(1);\n expect(mockDataTable.indexOf).toBeCalledTimes(1);\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n带有覆盖率报告的单元测试结果:
\n\n PASS stackoverflow/61396089/index.test.ts (20.978s)\n 61396089\n \xe2\x9c\x93 should pass (8ms)\n\n----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\nAll files | 44.44 | 100 | 16.67 | 44.44 | \n index.ts | 100 | 100 | 100 | 100 | \n obj.ts | 16.67 | 100 | 0 | 16.67 | 3-10 \n----------|---------|----------|---------|---------|-------------------\nTest Suites: 1 passed, 1 total\nTests: 1 passed, 1 total\nSnapshots: 0 total\nTime: 23.889s\nRun Code Online (Sandbox Code Playgroud)\n\n源代码:https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61396089
\n