javascript - 尝试对其执行测试时,内置 Number 对象的覆盖方法失败
问题描述
我为Number.isInteger
函数编写了 polyfill 方法,如下所示:
export const isInteger = Number.isInteger
|| ((value) => typeof value === 'number' && isFinite(value) && Math.floor(value) === value);
这里一切正常,但我想用 jest 测试它,但我无法覆盖Number.isInteger
这个 jest 测试用例中的默认方法。测试看起来像这样:
it('should check if isInteger polyfill works correctly', function () {
Number.isInteger = undefined;
Number.prototype.isInteger = undefined;
expect(isInteger(5)).toBe(true);
});
测试通过,但它没有在isInteger
常量内执行语句的第二部分。问题是我如何在测试中覆盖这个方法来强制它执行 polyfill?
解决方案
Number.isInteger
在导入模块时使用。每次测试都应该重新导入它才能使用 mocked Number.isInteger
。
Number.isInteger
应该恢复到不影响此测试之外的任何内容。
isInteger
是静态方法,Number.prototype.isInteger
不存在也不需要mock。
它应该是:
const isIntegerOriginal = Number.isInteger;
afterEach(() => {
Number.isInteger = isIntegerOriginal;
});
it('should check if isInteger polyfill works correctly', function () {
Number.isInteger = undefined;
let isInteger;
jest.isolateModules(() => {
isInteger = require('...').isInteger;
});
expect(isInteger(5)).toBe(true);
});
推荐阅读
- python - 在 qt 设计器中创建自定义小部件以在主窗口中使用
- android - 未处理的异常:输入“未来”
' 不是类型 'String' 的子类型 - python - 如果单词中存在特定字符,如何匹配整个单词?
- windows - 从一个文件中删除文本并批量添加到另一个文件中
- docusignapi - DocuSign 正在删除文档中的超链接
- laravel - Laravel 使用 ID 获取资源内部的资源?
- python - 在python中将文本文件覆盖到xml中,只有空格分隔符
- python-3.x - 从 Python 中的文件夹中删除某些文件
- python - 为所有请求设置请求默认配置
- html - 标签未完全显示在页面上