Я использую шутку в проекте ReactNative.Я хотел бы сравнить в тестовом примере два объекта одного класса.Вот пример определения класса:
class Person {
constructor(id, name, lastName) {
this.id = id;
this.name = name;
this.lastName = lastName;
}
fullName = () => {
return `${this.name} ${this.lastName}`;
}
}
Я создал тестовый пример, который сравнил два объекта класса Person
, которые должны быть идентичны:
test('checks the Person.constructor method', () => {
expect(new Person(1, 'John', 'Smith')).toEqual(new Person(1, 'John', 'Smith'));
});
Однако я получаю следующеерезультат:
FAIL __tests__/Comparison-test.js (7.328s)
● checks the Person.constructor method
expect(received).toEqual(expected)
Expected: {"fullName": [Function anonymous], "id": 1, "lastName": "Smith", "name": "John"}
Received: {"fullName": [Function anonymous], "id": 1, "lastName": "Smith", "name": "John"}
48 |
49 | test('checks the Person.constructor method', () => {
> 50 | expect(new Person(1, 'John', 'Smith')).toEqual(new Person(1, 'John', 'Smith'));
| ^
51 | });
at Object.toEqual (__tests__/Comparison-test.js:50:44)
Сравнивая ожидаемые и полученные значения, визуально я вижу, что они идентичны, однако я знаю, что они не считаются идентичными из-за анонимной функции fullName
.
Как я могу сравнить оба объекта?Я хотел бы иметь возможность отключить анонимные функции, даже если функция идентична в обоих объектах.
Я попытался использовать функцию expect
, установив lastName
в expect.anything()
.Тест, приведенный ниже, фактически прошел:
test('checks the Person.constructor method', () => {
expect(new Person(1, 'John', 'Smith')).toEqual({
id: 1,
name: 'John',
lastName: 'Smith',
fullName: expect.anything()});
});
Однако это не очень желательно, потому что мне пришлось бы перечислить все функции тестируемого класса, и, если я добавлю больше функций в класс, все его тестысломается.
Итак, есть ли способ сравнить два объекта одного и того же класса в jest, игнорируя все функции этих объектов?
Спасибо!