gpt4 book ai didi

javascript - 为什么我的 `react-scripts` 测试无法识别 Jest 函数 `toMatchObject`?

转载 作者:行者123 更新时间:2023-11-30 15:39:03 33 4
gpt4 key购买 nike

我正在测试一个 React 应用程序,它基本上遵循了标准的、官方认可的 create-react-app 设置。

我的测试如下:

import React from 'react';
import {shallow} from 'enzyme';

import MyComponent from './MyComponent';

describe('MyComponent', () => {
it('should have the expected properties', () => {
const wrapper = shallow(<MyComponent/>);
expect(wrapper.props()).toMatchObject({a: 1});
});
});

我的 package.json 包含以下内容:

{
...
"devDependencies": {
"enzyme": "^2.6.0",
"react-scripts": "0.8.3",
...
},
"dependencies": {
"react": "^15.4.1",
...
},
"scripts": {
"test": "react-scripts test --env=jsdom",
...
},
"jest": {
"automock": false
}
}

当我运行测试时,我收到以下错误消息:TypeError: expect(...).toMatchObject is not a function

然而,react-scripts documentation指出 Jest 是使用的内置工具之一,例如我不必 npm install 它。和 Jest documentation清楚地表明 toMatchObject 是一个函数。

那么为什么我会收到此错误消息?

最佳答案

tl;dr:运行 npm install jest 以获取最新的 (v18+) jest。

2016 年 12 月初的原始答案:

我发现这是 Jest 本身的问题。已记录 here .如果我没看错的话,与其说它是一个错误,不如说它是一个在实际准备好公开发布之前就进入文档的工作中的功能。显然,它现在随时都应该出来。与此同时,有人(Jest 团队?其他人?)提供了一个可以找到的 helper here填写这个匹配器直到它正式可用。我还没有真正尝试过这个助手,我怀疑它可能很快就会消失,但我想如果感兴趣的读者真的想要这个功能,我会让他们知道。

2017 年 1 月上旬更新:

根据 this website toMatchObject 匹配器大约在 2017 年 1 月 3 日被包含在 Jest 中。那是 Jest v18(18.0.0?......目前是 18.1.0)。这仍然没有包含在基本的 React 下载中,因为当我删除我的 node_modules 文件夹并重新 npm install 时,这个匹配器仍然对我不起作用。但是,如果我用 npm install jest 专门更新了 jest,那么 node_modules/jest/package.json 表明 jest 现在已更新(对我来说,2017 年 1 月 15 日更新为版本 18.1.0) 和 toMatchObject 现在似乎可以工作了。

...实际上,上一段中的解决方案似乎变化无常,因为它确实在我最初使用它时有效,但不久之后又停止工作(再次重新删除 node_modules,重新npm install一切,重新npm install jest,甚至尝试@Scimonster 从评论中提出的建议,即删除 node_modules/react-scripts/node_modules/jest).我确实找到了另一个可行的 hack:手动添加来自 here 的实际 toMatchObject 代码到 node_modules/react-scripts/node_modules/jest-matchers/build/matchers.js (在恢复一些 ES6/typescript/babel?-ish 语法之后)。我认为这一切都会在不久的将来对 React 的更新中得到解决,但现在这对我有用(至少目前是这样!)。

关于javascript - 为什么我的 `react-scripts` 测试无法识别 Jest 函数 `toMatchObject`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41082962/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com