使用ase.mount时发生错误:“ TypeError:ReactWrapper只能包装有效元素”

Nou*_*uny 4 reactjs jestjs enzyme react-wrapper

将React元素传递到“ mount”函数时出现此错误:

it("Book - move book to a shelf should work", () => {
    let test = (<Book book={book} />);
    let component = mount(test);
    const select = component.find("select").first();
    expect(select).toBeDefined();
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除变量并将元素直接传递给方法,它将起作用。

it("Book - move book to a shelf should work", () => {
    let component = mount(<Book book={book} />);
    const select = component.find("select").first();
    expect(select).toBeDefined();
Run Code Online (Sandbox Code Playgroud)

它们有何不同?

更新:由于某种原因,此方法(来自Jest的renderer.create)没有抱怨:

let component = renderer.create(<Book onMoveBook={onMoveBook} book={book} />);
const tree = component.toJSON(); // Works fine.
Run Code Online (Sandbox Code Playgroud)

同样,令人惊讶的是,将变量转换为函数并将其传递给React.createElement也起作用了:

var test = React.createElement(() => <Book onMoveBook={onMoveBook} book={book} />);
let component = mount(test);
Run Code Online (Sandbox Code Playgroud)

小智 7

发生了同样的错误。该错误是由您如何安装“测试”组件引起的。执行此操作的方式不是安装有效的组件,而只是安装变量。您想将变量放在之间,< />以使其成为组件。

你在做let component = mount(test);应该做的事let component = mount(<test/>);


小智 1

这可能与 var 的实际情况有关let test

“名称小写的组件是 DOM 元素;自定义元素必须以大写字母开头” https://github.com/airbnb/enzyme/issues/966

我一直在喝消防水带(对酶来说有点新),记得昨天看到过这篇文章,但我并不是 100% 积极。