将ES5 React + Flux调度程序测试转换为ES6失败

时间:2016-05-11 08:51:21

标签: reactjs import require dispatcher jestjs

他们的__tests __ / TodoStore-test.js文件: https://github.com/facebook/flux/blob/master/examples/flux-todomvc/js/stores/tests/TodoStore-test.js

他们的js / dispatcher / AppDispatcher.js文件: https://github.com/facebook/flux/blob/master/examples/flux-todomvc/js/dispatcher/AppDispatcher.js

在他们的情况下,调度员就是这样:

var Dispatcher = require('flux').Dispatcher;
module.exports = new Dispatcher();

在他们的测试beforeEach中重置:

AppDispatcher = require('../../dispatcher/AppDispatcher');

现在,在我自己的项目中,我想使用ES6的做事方式。不过我不知道怎么回事。 requireimport之间存在差异。

我的调度员:

import { Dispatcher } from 'flux';
var dispatcher = new Dispatcher({
    logLevel: 'ALL'
});
export default dispatcher;

作为应用中的一部分 - 在我的应用中正常工作,但上面的require示例没有。

需要转换为ES6 import的测试部分:

beforeEach(function() {
    AppDispatcher = require('./../src/dispatcher/dispatcher');
    TodoStore = require('./../src/stores/TodoStore');
    callback = AppDispatcher.register.mock.calls[0][0];
});

但是,当然,这不起作用:

beforeEach(function() {
    AppDispatcher = import './../src/dispatcher/dispatcher';
    // snip
});

或者:

import dispatcher from './../src/dispatcher/dispatcher';
beforeEach(function() {
    AppDispatcher = new dispatcher();
    // snip
});

我现在只是通过反复试验来做,只是为了编写测试而花费了太多时间。

我的思考过程:

他们需要调度员文件输出的任何内容,总是new Dispatcher()

就我而言,我正在创建一个new Dispatcherexport该实例。相反,我可能不需要在调度程序文件中实例化它,但是将其保留到export,例如:export default new Dispatcher(),但这看起来很糟糕。

但无论我尝试什么,我都会遇到如下错误:

TypeError: Cannot read property 'register' of undefined

有没有人知道如何让这个运行起来? 很有责任!

1 个答案:

答案 0 :(得分:0)

ES6导入语法实际上是import defaultMember from 'module-name';

所以在你的情况下,它将是

import AppDispatcher from './../src/dispatcher/dispatcher';
import TodoStore from './../src/stores/TodoStore';

有关ES6导入的详细信息,请阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import