Jest.fn-使用jest.mock时返回的值返回未定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jest.fn-使用jest.mock时返回的值返回未定义相关的知识,希望对你有一定的参考价值。
我有以下文件正在尝试为其编写单元测试:
import document from '../../globals';
const Overlay = () =>
console.log(document.getElementsByTagName()); // this outputs 'undefined'
;
我正在努力模拟getElementsByTagName
函数。我的测试看起来像这样。
import document from '../../globals';
jest.mock('../../globals', () => (
document:
getElementsByTagName: jest.fn().mockReturnValue('foo')
));
console.log(document.getElementsByTagName()); // this outputs 'foo'
但是不幸的是,头文件中的console.log
始终输出undefined
。它可以看到文档对象和getElementsByTagName
模拟,但返回值始终为undefined
。
如果我console.log(document.getElementsByTagName)
,我得到以下信息:
getElementsByTagName:
[Function: mockConstructor]
_isMockFunction: true,
getMockImplementation: [Function],
mock: [Getter/Setter],
mockClear: [Function],
mockReset: [Function],
mockReturnValueOnce: [Function],
mockReturnValue: [Function],
mockImplementationOnce: [Function],
mockImplementation: [Function],
mockReturnThis: [Function],
mockRestore: [Function] ,
但是如果我在另一个文件中做同样的事情,我会得到这个:
function ()
return fn.apply(this, arguments);
我怀疑jest.mock
正在将jest.fn
模拟包装在另一个函数中。。有什么想法吗?
答案
它对我有用。
例如
index.ts
:
import document from './globals';
export const Overlay = () =>
console.log(document.getElementsByTagName());
;
globals.ts
:
export const document =
getElementsByTagName()
return 'real element';
,
;
index.test.ts
:
import Overlay from './';
jest.mock('./globals', () => (
document:
getElementsByTagName: jest.fn().mockReturnValue('foo'),
,
));
describe('46431638', () =>
it('should mock and pass', () =>
jest.spyOn(console, 'log');
Overlay();
expect(console.log).toBeCalledWith('foo');
);
);
带有覆盖率报告的单元测试结果:
PASS src/stackoverflow/46431638/index.test.ts
46431638
✓ should mock and pass (24ms)
console.log node_modules/jest-mock/build/index.js:860
foo
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 6.601s, estimated 13s
源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/46431638
以上是关于Jest.fn-使用jest.mock时返回的值返回未定义的主要内容,如果未能解决你的问题,请参考以下文章
jest中的mock,jest.fn()jest.spyOn()jest.mock()
jest中的mock,jest.fn()jest.spyOn()jest.mock()