Javascript 如何修复此笑话错误:“quot;组件遇到声明异常";?
我试着用Jest和酶来测试一种反应成分。目前我的测试非常简单,我只是想确保组件安装:Javascript 如何修复此笑话错误:“quot;组件遇到声明异常";?,javascript,reactjs,jestjs,enzyme,Javascript,Reactjs,Jestjs,Enzyme,我试着用Jest和酶来测试一种反应成分。目前我的测试非常简单,我只是想确保组件安装: import React from 'react'; import Enzyme, { shallow } from 'enzyme'; import EnzymeAdapter from 'enzyme-adapter-react-16'; import App from './App'; Enzyme.configure({ adapter: new EnzymeAdapter() }); desc
import React from 'react';
import Enzyme, { shallow } from 'enzyme';
import EnzymeAdapter from 'enzyme-adapter-react-16';
import App from './App';
Enzyme.configure({
adapter: new EnzymeAdapter()
});
describe('App Component', () => {
const app = shallow(<App />);
it('renders successfully', () => {
expect(app).toMatchSnapshot();
});
});
有争议的一行代码如下:
this.timerSDK = new window.TimerSDK({ accessToken: token });
TimerSDK
是通过index.html
中的脚本标记加载的第三方脚本。它不像es6模块那样导入
当实际使用应用程序时,上面的代码在浏览器中运行良好,但在运行测试时出错
如何解决此问题?Jest的默认设置是由jsdom
提供的类似浏览器的环境,它提供了一个模拟的窗口
,该窗口也是全局
对象
您可以在测试开始时在第三方脚本上调用require
,以获取其导出,并在global
(或window
)上设置这些导出(如果每次测试都需要,也可以在设置模块中进行设置):
global.TimerSDK=require('path-to-script');//{
const-app=shallow();
它('渲染成功',()=>{
expect(app.toMatchSnapshot();
});
});
组件没有修改窗口对象,它只是调用TimerSDK
对象上的方法。你所说的在测试中导入脚本是有道理的,但这样做并不能消除错误。不幸的是:(@TK123第三方库是什么?我会看看它是如何工作的,并更新我的答案。谢谢你的帮助,但这是一个内部库,所以我不能发布它,“TimerSDK”是一个占位符lie lol我能说的就是它是用requireJS模块语法编写的,我对它不太了解。它已经缩小了。也许这就是问题所在,因为我注意到脚本不能在常规组件中导入而不抛出错误(因此我首先将它作为脚本标记加载)。因此,在测试中导入它可能也失败了…@TK123 gotcha,我已经使用requireJS模块syntaxUnrelated更新了脚本的答案,但是Jest也提出了这样一个“遇到声明异常”错误,如果您使用回调创建todo
测试:“错误:必须仅使用描述调用todo。”
this.timerSDK = new window.TimerSDK({ accessToken: token });