TypeError:无法读取未定义的属性“具有”

时间:2018-09-09 18:32:07

标签: reactjs enzyme

我的反应酶测试中出现此错误-TypeError: Cannot read property 'have' of undefined

下面是我的测试文件:

import React from 'react';
import ReactDOM from 'react-dom';
import { mount } from 'enzyme';
import TransactionsTable from './TransactionsTable';

import Pagination from './Pagination';

it('contains a table', () => {
  const wrapper = mount(<TransactionsTable />);
  expect(wrapper.find(Pagination)).to.have.lengthOf(1);
});

我看不出我的代码与我所看到的解决方案有何不同。此外,它似乎符合文档。我有什么想念的吗?

更新

我也尝试修复以下问题(针对Jest),但是我输出了大量红色:

const wrapper = mount(<TransactionsTable />);
expect(wrapper.find(Pagination)).toHaveLength(1);

错误:

FAIL  src/components/includes/TransactionsTable.test.js
  ● <TransactionsTable /> › contains a table

    expect(received).toHaveLength(length)

    Expected value to have length:
      1
    Received:
      {Symbol(enzyme.__unrendered__): null, Symbol(enzyme.__renderer__): {"batchedUpdates": [Function batchedUpdates], "getNode": [Function getNode], "render":...

现在似乎是正确的方法调用(toHaveLength),但是我现在以错误的方式传递了分页组件吗?

2 个答案:

答案 0 :(得分:1)

我认为使用酶标匹配器后出现的错误是因为酶无法在Pagination中找到TransactionsTable成分。 toHaveLength与酶包装器一起使用时,笑话匹配器在失败时会给出奇怪的输出。 尝试使用以下语句

expect(wrapper.find(Pagination).length).toBe(1);

我敢打赌,您会得到一个错误,期望值是1但收到0

PS:here是Jest回购中关于奇怪输出的问题。

答案 1 :(得分:0)

这取决于您使用的是哪个测试运行程序或断言库。

对于Jest,您想使用toHaveLength

it('contains a table', () => {
  const wrapper = mount(<TransactionsTable />);
  expect(wrapper.find(Pagination)).toHave.lengthOf(1);
});

to.have.lengthOf(1)是柴的所在