Javascript 笑话模拟反应组件

Javascript 笑话模拟反应组件,javascript,reactjs,unit-testing,mocking,jestjs,Javascript,Reactjs,Unit Testing,Mocking,Jestjs,我使用的插件使用json模式呈现表单。对于输入、按钮等元素,它使用结构中的React组件渲染组件。在我们的应用程序中,我们接收到描述布局的模式json。例如,我们可以收到这样的内容(简化以便于阅读) 我有一个转换器函数,它将组件放置在结构中检测到的位置。它将发送如下内容:(再次简化) 我想为此编写一个测试,但在比较结果和预期结果时遇到了麻烦。在我的测试中,我模拟表组件,并通过一个命名的模拟函数作为第二个参数发送。然后在预期结果中使用相同的命名参数 我得到一个错误:jest.mock的第二个参数必

我使用的插件使用json模式呈现表单。对于输入、按钮等元素,它使用结构中的React组件渲染组件。在我们的应用程序中,我们接收到描述布局的模式json。例如,我们可以收到这样的内容(简化以便于阅读)

我有一个转换器函数,它将组件放置在结构中检测到的位置。它将发送如下内容:(再次简化)

我想为此编写一个测试,但在比较结果和预期结果时遇到了麻烦。在我的测试中,我模拟表组件,并通过一个命名的模拟函数作为第二个参数发送。然后在预期结果中使用相同的命名参数

我得到一个错误:
jest.mock
的第二个参数必须是内联函数
。我可以将其更改为内联函数,但是如何在用于比较的预期结构中使用它呢?

//测试代码


import React from 'react';

const mockComponent = () => <div>table</div>
jest.mock('./Table', mockComponent);

const schema = {
  component: 'table'
}

describe('Component Structure', () => {
  test('componentizes the schema structure', () => {

    const results = convert(schema);
    const expected = {
      component: mockComponent
    };
    expect(results).toEqual(expected);

  });
});

从“React”导入React;
const mockComponent=()=>表
mock('./表',mockComponent);
常量模式={
组件:“表”
}
描述('组件结构',()=>{
test('将架构结构组件化',()=>{
const results=convert(模式);
预期常数={
组件:mockComponent
};
期望(结果)。toEqual(期望);
});
});

正确模拟组件的方式如下:

const mockComponent=()=>表
jest.mock('./表',()=>mockComponent)

错误是因为您没有正确模拟组件,正确的方法应该是:


jest.mock('./Table',()=>mockComponent)好发现。这是一个错误。我的例子。所有内容都在同一个目录中。我现在就更新这个例子。@RichardHealy我也遇到过类似的问题。我已经更新了答案。请注意:执行上述操作会给我提供
babel插件jest-high:jest.mock`的第二个参数必须是内联函数。`这可能是由于文档中关于提升的一句话:“因此,jest会自动将jest.mock调用提升到模块顶部(在任何导入之前)”。我可以删除
mockComponent
并将
()=>表
拉入
jest.mock
行,它就可以工作了。
import Table from './Table';

covert(schema) {
  return {
    component: Table // where table is: (props:any) => JSX.Element
  }
}

import React from 'react';

const mockComponent = () => <div>table</div>
jest.mock('./Table', mockComponent);

const schema = {
  component: 'table'
}

describe('Component Structure', () => {
  test('componentizes the schema structure', () => {

    const results = convert(schema);
    const expected = {
      component: mockComponent
    };
    expect(results).toEqual(expected);

  });
});