Привет, я новичок в тестировании JEST, поэтому я хочу попросить вас о некоторой поддержке.
Я пытаюсь протестировать функцию из компонента App.js в своем App.test.js
но получаю ошибку:
TypeError: _App.default.avg не является функцией.
Вот мой компонент App.js
class App extends React.Component {
state = { }
avg = (elements) => {
let sum=0;
for(let i=0; i<elements.length; i++){
sum += elements[i].main.temp;
}
return (sum/elements.length).toFixed(2);
}
render() {
return(
<BrowserRouter>
<AppContext.Provider value = {contextElements}>
<div className = "App container">
<Route path = "/" component = {SettingsBar}/>
<Route path = "/settings" component = {SettingsView}/>
<Route exact path = "/" component = {RootView}/>
<Route path = "/itemview" component = {ItemView}/>
</div>
</AppContext.Provider>
</BrowserRouter>
)
}
}
export default App;
И Приложение.test.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
describe('avg', () => {
it('should return 3 for given array [1,2,3,4,5]', () => {
expect(App.avg([1,2,3,4,5])).toBe(3);
});
});
Что я делаю неправильно?
Я действительно должен поддержать этот комментарий — React самоопределяется как A JavaScript library for building user interfaces — поэтому вам действительно не следует использовать компонент React для размещения служебных функций, таких как эта, если только он напрямую не влияет на то, что делает этот компонент. В этом случае вы должны тестировать то, что компонент отображает при определенных условиях, и не обращать внимания на эту функцию. Вы должны быть свободны в рефакторинге компонента, как хотите, и пока он отображает ту же DOM, что и раньше, вам не нужно менять свой тест. Это заставит вас постоянно обновлять тесты.
Спасибо за ваш совет, я попытаюсь перестроить свой код.



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


Вы можете попробовать создать экземпляр класса App.js.
Итак, после импорта вы можете попробовать что-то вроде
const myApp = новое приложение();
Затем, в ожидании, вызовите myApp.avg(arguments).
Это работает нормально. Большое спасибо! Вы спасли мой вечер :)
Я бы посоветовал удалить функцию из приложения и поместить ее в другой модуль, файл или класс, который можно протестировать в изолированной среде. В противном случае используйте неглубокий монтаж от чего-то вроде Enzyme, чтобы получить экземпляр вашего приложения.