正在运行的Jest测试导致'TypeError:无法读取未定义的属性'Symbol(Symbol.toStringTag)'

时间:2019-03-08 09:31:24

标签: node.js jestjs travis-ci

我正在使用travis-ci部署我的开源项目。自从我的代码没有更改以来,从昨天开始,我所有的构建都无法运行单元测试,并出现下一个错误:

~/w/some-package ❯❯❯ yarn test
yarn run v1.13.0
$ jest
 FAIL  test/unit/lib/sometest.js
  ● Test suite failed to run

    TypeError: Cannot assign to read only property 'Symbol(Symbol.toStringTag)' of object '#<process>'

      at _default (node_modules/jest-util/build/createProcessObject.js:85:34)

我的构建配置使用最新的节点并仅运行测试

language: node_js
node_js:
 - node
script:
 - yarn test

travis-ci机器的依存关系是否发生变化? node和jest的版本之间有什么兼容性吗?

3 个答案:

答案 0 :(得分:6)

这似乎是最新稳定版本的节点11.11.024.3.0之前的jest版本之间的不兼容。

当前有2种解决方案:

  • 升级Jest(它将使用与节点11.11兼容的Jest版本)
yarn upgrade jest --latest
  • .travis.yml中的节点的Pin版本(这将确保travis使用的节点版本与旧的jest版本兼容)
language: node_js
node_js:
 - "10.15.3"
script:
 - yarn test

答案 1 :(得分:1)

升级到jest 24.3.1可解决此问题,因为该问题已在24.3.0版本中修复。

pre-24.3.x版本与node 11.11.0不兼容。

答案 2 :(得分:0)

另一种可能性是您在构造函数中添加了新服务,但忘记了将其添加到规范文件中。

我建议使用该服务所需的方法来创建一个模型:

const utilServiceMock = jasmine.createSpyObj('utilService', ['isNewFeatureEnabled']);

然后将其添加为提供者:

{ provide: UtilService, useValue: utilServiceMock},

最后注入它:

utilServiceSpy = TestBed.inject(UtilService);

(您可以将它们放入 beforeEach 触发器中的最后2个步骤)