找不到酶适配器反应16的声明文件?

问题描述:

我一直在使用Enzyme在我的React应用程序中测试组件。在几周内第一次更新我的软件包后,我开始从我的测试中得到一个错误。找不到酶适配器反应16的声明文件?

FAIL src/__tests__/title.test.ts 
    ● Testing title component › renders 
Enzyme Internal Error: Enzyme expects an adapter to be configured, but found none. [...] 
To find out more about this, see http://airbnb.io/enzyme/docs/installation/index.html 

我继续为链接描述安装'enzyme-adapter-react-16'并添加以下行到我的测试文件:

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

然而,当我的应用程序是用打字稿,我现在碰到了两个新问题。

error1 error2

为了澄清图像的第一个错误,TS7016,是没有任何类型enzyme-adapter-react-16,第二个错误,TS2339说,enzyme没有财产configure

我是比较新的打字稿,所以我需要一些帮助。我试图安装enzyme-adapter-react-16的类型,但似乎并不存在。

我应该尝试将它们添加自己,或者是有一些方法可以让我避免这个问题一起?

也很好奇是什么让这个错误出现。我以前不需要适配器,为什么现在呢?

我应该尝试自己添加它们还是有某种方法可以避免这个问题?

我相信你是正确的,目前还没有类型enzyme-adapter-react-16 - 这是很新的,所以它似乎没有人创建任何再。

你可以自己创建它们,如果你以为他们是明确的,你可能它们有助于DefinitelyTyped供他人使用。为了“避免”这个问题,你可以让TypeScript忽略它没有类型信息的事实。

要忽略的错误类型:

  • 对于第一个错误,该错误信息试图帮助的“添加新的声明(.d.ts)文件...”。所以,你可以创建一个文件(我通常把它称为“/类型”文件夹中)呼吁像enzymeAdapter.d.ts,使内容declare module 'enzyme-adapter-react-16';(从错误消息)。这基本上告诉打字稿只将输入的对象视为any类型(即没有类型检查)。

  • 对于第二个错误,您可以将enzyme导入到any,然后调用configure。例如:(enzyme as any).configure({ adapter: new Adapter() });。如果tslint抱怨使用any,你可以得到它忽略这一点与上面一个// tslint:disable-next-line:no-any注释行。

全码:

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

// tslint:disable-next-line:no-any 
(enzyme as any).configure({ adapter: new Adapter() }); 

也很好奇是什么让这个错误出现。我以前不需要适配器,为什么现在呢?

这是从enzyme项目3版本的新设计选择 - 你可以阅读有关从2.x版here的重大变化细节。我认为适配器方法是为了处理支持不同版本的反应更容易和更一致的不同要求。

+0

太棒了!感谢@jono工作! :) – langkilde

+0

没问题@langkilde :)对于未来的人来说,这些应该只是暂时的变通,直到类型跟上图书馆。 –

+1

@langkilde FYI:更新到'@ types/enzyme'(v2.8.9)的最新版本现在应该包含'configure'函数,因此不再需要第二个错误解决方法。人们移动得很快! –