Я пытаюсь написать шуточный тест для метода, определенного в моем классе React.Component.
class Math extends React.Component {
constructor(props) {
super(props);
}
sum(a, b){
return a+b;
}
export default Math;
и в моем файле Jest я делаю это:
import { Math } from './Math'
describe('Math', () => {
it('should add correctly', () => {
const result = Math.sum(10, 10);
expect(result).toEqual(20);
}
Но это дает мне сообщение об ошибке:
TypeError: Cannot read property 'sum' of undefined
Как мне решить эту проблему? Я пытался найти его в Интернете, но не нашел решения.





Вы используете экспорт default, в то время как ваш импорт имеет имя. Кроме того: вы используете метод sum для самого класса (как будто это был статический метод) вместо экземпляра класса.
Проблема в том, что вы используете Math.sum(x,y) как статическую функцию вместо ссылки на объект.
Вы можете изменить свою функцию на:
static sum(a, b){
return a + b;
}
Ссылки на объекты призывают вас передавать переменные в конструктор или динамически назначать их через функцию.
let x, y;
class Math {
//The constructor has optional parameters which default to 0.
constructor(first=0, second=0){
this.x = first;
this.y = second;
}
//Makes a sum with the variables passed through the constructor.
sum(){
return x+y;
}
//sets the x value
changeX(num){ x = num; }
//returns the x value
getX(){ return x; }
//This function saves it to the object beforehand so you may retrieve it later.
sumSaved(first, second){
this.x = first;
this.y = second;
return x + y;
}
//Assigned through the constructor.
let foo = new Math(first:1,second:2);
foo.sum(); //returns 3 because 1+2=3
foo.changeX(2);
foo.sum(); //returns 4 because 2+2=4
//Assigned through a function.
let bar = new Math();
bar.sumSaved(4,6); //returns 10 and overwrites variables.
bar.getX(); //returns 4, because you saved it earlier.
См. здесь для получения информации о статических функциях.
См. здесь о том, когда следует использовать статические функции.
Кроме того, для получения информации об экспорте по умолчанию см. здесь.
хорошо, но в будущем я думаю добавить этот экземпляр также внутри статического метода, и вы не можете получить к нему доступ внутри статического метода, поэтому я пытался найти лучшее решение.