2016-01-14 1 views
0

Я переношу приложение-ответ, чтобы использовать синтаксис 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 

Я не совсем уверен, что я делаю неправильно.

+0

Является ли это класс с только статическими методами? – yeouuu

+0

Да .. у него есть только статические методы .. Это проблема? – shashi

+5

Это может быть интересно для вас: http://stackoverflow.com/questions/29893591/es6-modules-export-single-class-of-static-methods-or-multiple-individual-method – yeouuu

ответ

0

В конце концов, я экспортировал и импортировал каждую функцию отдельно, как было предложено torazaburo в комментариях.

Кроме того, вместо того, чтобы использовать импорт, использование требует, как указано здесь:

https://github.com/babel/babel-jest/issues/16

Смежные вопросы