- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试一个 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/
我对我的 Mongoose 模型进行了测试,虽然一个模型的测试运行完全正常,但另一个模型基本上是一个副本 - 不起作用。老实说我不明白这个问题。我尝试删除一些属性或添加硬编码值以真正 100% 完全匹
我对我的 Mongoose 模型进行了测试,虽然一个模型的测试运行完全正常,但另一个模型基本上是一个副本 - 不起作用。老实说我不明白这个问题。我尝试删除一些属性或添加硬编码值以真正 100% 完全匹
我正在使用 Jest 来测试我的 Node 应用程序,以下情况验证了一些数据已添加到数据库中(考虑 DB 逻辑工作正常): it("should add empty string hooks if n
我正在测试一个对象是否匹配一组字段,但其中一个是 float ,我需要使用 .toBeCloseTo .如何在一个 expect 内完成? expect(foo).toMatchObject({
我写了下面的测试: it('Can decrement the current step', function () { expect(reducer(TestState, { type: '
假设某个东西返回一个复杂的对象: const value = { ..., client: { ... }, ... }; 我想测试一堆属性,对于client我想确保它有一定的
我想用 jest 测试返回的对象是否符合我的预期。 我正在尝试这个: const desiredResult = { host: '192.168.1.1', port: expect.any
我正在使用 JEST 匹配器 toMatchObject 来确保对象包含多个属性并且一些值是静态的,而其他一些值应该匹配特定的正则表达式 问题是:当静态值不匹配时,输出也会显示正则表达式值不匹配,尽管
我有一个快速 API 端点,它返回一个对象,并且在该对象上有一个属性(在我们下面的示例中为 property3),它的值是日期。 例如 res.body = { "property1
我正在测试一个 React 应用程序,它基本上遵循了标准的、官方认可的 create-react-app 设置。 我的测试如下: import React from 'react'; import {
我是一名优秀的程序员,十分优秀!