Jest + ES2015导入

时间:2016-02-14 19:18:46

标签: reactjs ecmascript-6 jestjs

我正在使用ES2015,Jest,React进行练习,我收到此错误:

TypeError: Property description must be an object: undefined
at defineProperties (native)
at Object.eval (<PROJECT>/node_modules/event-emitter/index.js:127:8)

在深入研究之后,我认为它与导入nodeModule EventEmitter或通过扩展类有关。

这是脚本文件的代码:

import EventEmitter from 'event-emitter';
import AppDispatcher from '../dispatcher/app-dispatcher';

import {
    ACTION_CURSOR_POSITION_CHANGED,
    ACTION_IS_DRAGGING_CHANGED
} from '../constants/actions';

let _draggingStoreInstance = null;

/**
 * DraggingStore class
 */
export default class DraggingStore extends EventEmitter
{
    /**
     * Constructor
     */
    constructor () {
    // ...

测试文件的源代码如下所示:

import '../unmock/dragging-store.unmock.js';
import DraggingStore from '../../src/stores/dragging-store';

describe('Dragging Store', () => {
   let draggingStoreInstance = null;

   beforeEach(() => {
       draggingStoreInstance = DraggingStore.getInstance();
   });

   it('should be defined', () => {
       expect(DraggingStore).toBeDefined();
       expect(draggingStoreInstance).toBeDefined();
   });
});

我做了一个额外的文件来排除嘲笑:

jest.dontMock('../../src/stores/dragging-store.js');
jest.dontMock('../../src/dispatcher/app-dispatcher.js');
jest.dontMock('../../src/constants/actions.js');

编译后,代码本身在浏览器中运行顺利,但测试引擎会给出错误。

我在package.json中添加了这个:

"scripts": {
    "test": "jest"
  },
 "jest": {
    "scriptPreprocessor": "./node_modules/babel-jest",
    "unmockedModulePathPatterns": [
      "./node_modules/react"
    ],
    "collectCoverage": true,
    "testDirectoryName": "spec",
    "moduleFileExtensions": [
      "js"
    ],
    "collectCoverageOnlyFrom": {
        // All files to test
    }
  }

有没有人知道如何解决这个问题? 提前谢谢......

更新:完整的源代码可以在这里找到:https://github.com/dejakob/unlease-chess

1 个答案:

答案 0 :(得分:2)

我意识到这已经很晚了,但是,在你发布这个问题的时候,已经发生了很多变化。使用Jest v19 +,并假设您使用的是最新版本的Babel,您可以按照此处的说明操作:

http://facebook.github.io/jest/docs/webpack.html#using-with-webpack-2

因为您正在使用模块,所以您需要告诉Babel将它们转换为commonjs require,以便它们可以在节点环境中运行,这就是Jest的工作方式。