Шуточный тест Fat Arrow в классе отсутствует

Я пишу модульные тесты для компонента в Jest, и сейчас я просто тестирую функциональность.

Функция класса выглядит следующим образом:

class Comp extends Component {

    fetch = null;

    update = async () => {
        try {
            if(this.fetch)
                this.fetch.cancel();

            // Do stuff
            this.fetch = createFetch();

            await this.fetch();
        } catch (e) {
            console.log('Error in update!!!', e);
        }
    }

    render() {
        return(
             <div></div>
        )
    }
}

Шуточный тест выглядит так:

test('Should call fetch.cancel if fetch exists', async () => {
    const spy = jest.fn();
    const comp = new Comp();

    comp.fetch = {cancel: spy};

    await comp.update();

    expect(spy).toHaveBeenCalledTimes(1);
});

Но я получаю эту ошибку от функции обновления:

Ошибка в обновлении!!! ReferenceError: _this3 не определен

Кто-нибудь может мне с этим помочь?


person CherryNerd    schedule 09.03.2018    source источник
comment
Не могли бы вы попробовать без функций стрелок?   -  person Jeremy M.    schedule 09.03.2018
comment
Остальной функционал рухнет. Кроме того, мне не нужно использовать fn.bind(this) в других частях компонента.   -  person CherryNerd    schedule 09.03.2018
comment
Я предполагаю, что проблема не в функции стрелки в шутке, а в свойстве класса в вашем классе Comp. взгляните на это: babeljs.io/docs/plugins/transform-class-properties   -  person luschn    schedule 09.03.2018
comment
Когда вы получаете эту ошибку, когда запускаете тест или выполняете это в своем браузере?   -  person VivekN    schedule 09.03.2018
comment
@VivekN Это выполнение теста Jest, поэтому командная строка.   -  person CherryNerd    schedule 13.03.2018
comment
@luschn Это сработало! Ну, почти. По какой-то причине мне также нужно было добавить {spec: true}. Если вы можете указать это в качестве ответа, я приму это :)   -  person CherryNerd    schedule 13.03.2018
comment
Спасибо, добавил немного информации о режиме спецификации   -  person luschn    schedule 13.03.2018


Ответы (1)


Я предполагаю, что проблема не в функции стрелки в Jest, а в свойстве класса в вашем классе Comp. Взгляните на это: http://babeljs.io/docs/plugins/transform-class-properties

Изменить: это сработало после установки режима спецификации: http://2ality.com/2017/01/babel-esm-spec-mode.html

Модули, переданные в этом режиме, максимально соответствуют спецификации без использования прокси-серверов ES6.

person luschn    schedule 13.03.2018