有+ ES2015导入
Jest + ES2015 import
我正在使用 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 或通过它扩展 class 有关。
这是脚本文件的代码:
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
我意识到这已经很晚了,但是,在您发布此问题时发生了很多变化。使用 Jest v19+,并假设您也使用最新版本的 Babel,您可以按照此处的说明进行操作:
http://facebook.github.io/jest/docs/webpack.html#using-with-webpack-2
由于您正在使用模块,因此您需要告诉 Babel 将它们转译为 commonjs require
,以便它们可以 运行 在节点环境中,这就是 Jest 的工作方式。
我正在使用 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 或通过它扩展 class 有关。
这是脚本文件的代码:
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
我意识到这已经很晚了,但是,在您发布此问题时发生了很多变化。使用 Jest v19+,并假设您也使用最新版本的 Babel,您可以按照此处的说明进行操作:
http://facebook.github.io/jest/docs/webpack.html#using-with-webpack-2
由于您正在使用模块,因此您需要告诉 Babel 将它们转译为 commonjs require
,以便它们可以 运行 在节点环境中,这就是 Jest 的工作方式。