仅在运行PhantomJS时获得失败的测试(TypeError)

时间:2017-04-06 05:48:44

标签: webpack phantomjs karma-runner babeljs webpack-2

tl; dr 如何在PhantomJS中删除此错误?

回购

参考回购:https://github.com/Sawtaytoes/Tabletop-Helper/tree/d123927b8f65fc97234fd2543bf9103ac0db58ab

运行yarn test

问题

当从Chrome与PhantomJS运行这些相同的测试时,我发现错误显示与Webpack捆绑包相关,或者我认为。

错误

TypeError: undefined is not a constructor (evaluating '__WEBPACK_IMPORTED_MODULE_3_content_smash_up_decks__["a" /* sets */].find(function (set) { return title === set.title; })')

代码

sets
.find(set => title === set.title)
.decks
.reduce((combined, { title }) => ({ ...combined, [title]: setState }), {})

混乱

特别突破的是sets.find()。如果我把它留下并制作sets[0],它就可以了。在注销sets.find()的值时,它总是返回一个匹配的数组,因为编写的测试是为了传递有效的集合标题。

具有类似错误的其他两个测试也引用sets.find()。 PhantomJS不喜欢这个功能是什么?

1 个答案:

答案 0 :(得分:1)

在缩小范围之后,我能够让它只显示

TypeError: undefined is not a constructor (evaluating 'Array.prototype.find')

PhantomJS 2.1及更早版本不支持Array.prototype.find。解决方案是通过npm安装PhantomJS插件并在Karma配置中进行设置:

ptim/phantomjs-polyfill-find

安装后,需要修改Karma配置。可以像这样修改files属性的第一个数组参数:

files: [
    `node_modules/phantomjs-polyfill-find/find-polyfill.js`,
    ...
],

注意: 必须在路径中引用node_modules/