Я переношу приложение-ответ, чтобы использовать синтаксис ES6. У меня есть файл Utils.js следующим образом:Экспорт каждого и каждого члена класса ES
export default class Utils {
static getParameterByName(name) {
const paramName = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
const regex = new RegExp('[\\?&]' + paramName + '=([^&#]*)');
const results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}
static getArrayOfIndices(text, char) {
const resultArray = [];
let index = text.indexOf(char);
const lastIndex = text.lastIndexOf(char);
while (index <= lastIndex && index !== -1) {
resultArray.push(index);
if (index < lastIndex) {
index = text.substr(index + 1).indexOf(char) + index + 1;
} else {
index = lastIndex + 1999; // some random addition to fail test condition on next iteration
}
}
return resultArray;
}
}
Это ранее было в JavaScript, и я имел шутя модульные тесты, написанные для них. Однако, когда я запускаю тесты теперь я получаю ошибку
Utils.getArrayOfIndices is not a function
Чтобы запустить тесты шутя на ES6 коде, я использую пакет Бабель-шутку, который transpiles кода так, что шутка может запустить его.
При отладке теста шутки, когда я наводил и проверял объект Utils, я вижу, что функции есть, но они выглядят серыми, поэтому, возможно, не доступны извне.
Как экспортировать все эти функции с помощью ES6?
==== EDIT 1 ====
После замечаний, я изменил файл использовать модуль по умолчанию, как показано ниже:
export default {
getParameterByName: function getParameterByName(name) {
const paramName = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
const regex = new RegExp('[\\?&]' + paramName + '=([^&#]*)');
const results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
},
getArrayOfIndices: function getArrayOfIndices(text, char) {
const resultArray = [];
let index = text.indexOf(char);
const lastIndex = text.lastIndexOf(char);
while (index <= lastIndex && index !== -1) {
resultArray.push(index);
if (index < lastIndex) {
index = text.substr(index + 1).indexOf(char) + index + 1;
} else {
index = lastIndex + 1999; // some random addition to fail test condition on next iteration
}
}
return resultArray;
},
}
Однако вопрос может быть, как я импортирую файл. Я пробовал разные вещи. Перед изменением, модуль Utils сослались в методе beforeEach с использованием требуют
Utils = require('../Utils')
Позже с синтаксисом ES6, я импортировал модуль один раз в верхней части файла, как
import Utils from '../Utils';
Однако, это также выдает ту же ошибку, хотя и с немного другим сообщением.
TypeError: _Utils2.default.getArrayOfIndices is not a function
Я не совсем уверен, что я делаю неправильно.
Является ли это класс с только статическими методами? – yeouuu
Да .. у него есть только статические методы .. Это проблема? – shashi
Это может быть интересно для вас: http://stackoverflow.com/questions/29893591/es6-modules-export-single-class-of-static-methods-or-multiple-individual-method – yeouuu