Я пишу модульные тесты для компонента в 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.info('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);
});
Но я получаю эту ошибку из функции обновления:
Error in update!!! ReferenceError: _this3 is not defined
Кто-нибудь может мне с этим помочь?
Остальная часть функциональности выйдет из строя. Кроме того, мне не нужно использовать fn.bind (this) в других частях компонента.
Я предполагаю, что проблема не в стрелочной функции в шутку, а в свойстве класса в вашем классе Comp. взгляните на это: babeljs.io/docs/plugins/transform-class-properties
Когда вы получаете эту ошибку, когда вы запускаете свой тест или когда вы выполняете это в своем браузере?
@VivekN Это выполнение теста Jest, поэтому командная строка.
@luschn Это сработало! Ну, почти. По какой-то причине мне также потребовалось добавить {"spec": true}. Если вы можете вставить это в качестве ответа, я приму его :)
thanx, добавлена информация о режиме спецификации



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что проблема не в стрелочной функции в Jest, а в свойстве класса в вашем классе Comp. Взгляните на это: http://babeljs.io/docs/plugins/transform-class-properties
Обновлено: он работал после установки режима спецификации: http://2ality.com/2017/01/babel-esm-spec-mode.html
Modules transpiled in this mode conform as closely to the spec as is possible without using ES6 proxies
Не могли бы вы попробовать без стрелочных функций?