Тест React Jest с методом

Я пытаюсь написать шуточный тест для метода, определенного в моем классе 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

Как мне решить эту проблему? Я пытался найти его в Интернете, но не нашел решения.

odetocode.com/blogs/scott/archive/2015/02/02/… Проверить это сопряжение.
sheepiiHD 20.01.2019 01:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
261
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы используете экспорт 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. 

См. здесь для получения информации о статических функциях.

См. здесь о том, когда следует использовать статические функции.

Кроме того, для получения информации об экспорте по умолчанию см. здесь.

хорошо, но в будущем я думаю добавить этот экземпляр также внутри статического метода, и вы не можете получить к нему доступ внутри статического метода, поэтому я пытался найти лучшее решение.

lifemoveson 20.01.2019 02:20

Другие вопросы по теме