oll*_*e y 3 javascript testing unit-testing typescript jestjs
我有一个函数,我们称之为generateName,正如你\xe2\x80\x99 所猜到的那样,它会生成一个名称。问题是每次运行测试时都会生成一个新名称。
\n\n在我的一项测试中,我断言使用包含此名称的对象调用函数。然而,这个名字一直在变化。我可以只检查该对象是否具有属性名称,但我真的不想这样做。
\n\n我的想法是我可以模拟generateName函数的返回值并执行类似的操作
\n\nImport { generateName } from \xe2\x80\x98libs/generateName\xe2\x80\x99\n\njest.fn(generateName).mockResolvedValue ( \xe2\x80\x98hello\xe2\x80\x99 )\n\nexpect ( spy ).toHaveBeenCalledWith ( \n expect.objectContaining ( {\n name: 'houses',\n } )\n)\nRun Code Online (Sandbox Code Playgroud)\n
您可以使用jest.mock(moduleName,factory,options)来模拟libs/generateName模块。
例如\ngenerateName.ts:
export async function generateName() {\n const name = Math.random() + \'\';\n return name;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nmain.ts:
import { generateName } from \'./generateName\';\n\nexport function main() {\n return generateName();\n}\nRun Code Online (Sandbox Code Playgroud)\n\nmain.test.ts:
import { main } from \'./main\';\nimport { generateName } from \'./generateName\';\n\njest.mock(\'./generateName\', () => {\n return {\n generateName: jest.fn(),\n };\n});\n\ndescribe(\'61350152\', () => {\n it(\'should pass\', async () => {\n (generateName as jest.MockedFunction<typeof generateName>).mockResolvedValueOnce(\'hello\');\n const actual = await main();\n expect(actual).toBe(\'hello\');\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n带有覆盖率报告的单元测试结果:
\n\n PASS stackoverflow/61350152/main.test.ts (28.524s)\n 61350152\n \xe2\x9c\x93 should pass (6ms)\n\n----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\nAll files | 100 | 100 | 100 | 100 | \n main.ts | 100 | 100 | 100 | 100 | \n----------|---------|----------|---------|---------|-------------------\nTest Suites: 1 passed, 1 total\nTests: 1 passed, 1 total\nSnapshots: 0 total\nTime: 31.98s\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
11396 次 |
| 最近记录: |