Не удается превратить тест диспетчера ES5 React + Flux в ES6

Их файл __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. Я не уверен, как, хотя. Различия между require и import ускользают от меня.

Мой диспетчер:

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

Который — как часть приложения — отлично работает в моем приложении, но в приведенном выше примере require его нет.

Часть теста, которую нужно преобразовать в import ES6:

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
});

Or:

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

Сейчас я делаю это методом проб и ошибок, и написание теста занимает слишком много времени.

Мой мыслительный процесс:

Им требуется все, что выводит их файл диспетчера, который всегда является new Dispatcher().

В моем случае я создаю new Dispatcher и export этот экземпляр. Вместо этого мне, вероятно, нужно было бы не создавать экземпляр в файле диспетчера, а оставить это до export, например: export default new Dispatcher(), но это выглядит ужасно.

Но независимо от того, что я пытаюсь, я продолжаю получать ошибки, такие как:

TypeError: Cannot read property 'register' of undefined

Кто-нибудь знает, как запустить это и запустить? Весьма признателен!


person MHD    schedule 11.05.2016    source источник


Ответы (1)


Синтаксис импорта 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

person Marius Wirtherle    schedule 11.05.2016