酶:类型错误:适配器不是构造函数

IT技术 reactjs jestjs enzyme
2021-05-23 02:51:02

嗨,我试图用酶测试react应用程序,但它抛出一个错误TypeError: Adapter is not a constructor , Any Idea

这是我的测试文件

import ProductRow from '../product_row';
import React from 'react';
// import { mount } from 'enzyme';
import * as enzyme from 'enzyme';
import * as Adapter from 'enzyme-adapter-react-16';
enzyme.configure({ adapter: new Adapter() });

test('TodoComponent renders the text inside it', () => {
  const wrapper = enzyme.mount(
    <ProductRow  item={{}} quickView={[]}
      productPage={''}
      count={0}
      numberOfColumns={0}
      title={'title'}
      taxonomies={{}}
      excerpt={'excerpt'}
    />
  );
});

类型错误:适配器不是构造函数

4个回答

我认为import *在导入具有默认导出的module时不会按预期工作,这应该有效:

import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'

Enzyme.configure({ adapter: new Adapter() })

顺便提一句。您可以将上述内容放在一个文件中并在您的 Jest 设置中引用它,这样您就不必将其添加到每个测试中:

setupFiles: ['<rootDir>/tools/jest/setup-react-adapter.js'],

对于typescript:

import { configure } from 'enzyme';
import * as ReactSixteenAdapter from 'enzyme-adapter-react-16';
const adapter = ReactSixteenAdapter as any;
configure({ adapter: new adapter.default() });

您需要像这样使用导入:

import Adapter from 'enzyme-adapter-react-16';

这样:(import * as Adapter from ...)返回一条消息“TypeError: Adapter is not a constructor”。

如果您在esModuleInterop启用选项的情况下使用 Typescript,则需要以下内容:

import { configure} from 'enzyme';
import * as ReactSixteenAdapter from 'enzyme-adapter-react-16';
configure({ adapter: new (ReactSixteenAdapter as any)() });