ожидание(получено).toEqual(ожидаемое) // глубокое равенство — Выдает эту ошибку, когда ответ содержит троичное условие

#javascript #reactjs #jestjs #react-testing-library

Вопрос:

Я изучаю модульное тестирование с помощью Jest, это функция, которую я пытаюсь протестировать.

 import axios from "axios";

export const call = async () => {

 return axios.get("https://www.example.com").then((resp) =>{
     const response = resp.data
     let userData = {
         title : response.title ? response.title : "",
         url : response.url ? response.url : "",
         date : response.date ? response.date : " ",
         id : response.id ? response.id : "",
         email: response.email ? response.email : ""
     }
     return Promise.resolve(userData)
 })
}
 

вот это test.js файл —

 import axios from "axios"
import {call} from './components/call'

jest.mock('axios')

const expectedResult = {
    title:"hello"
}

const resp ={
    data : expectedResult
}

describe("test", ()=>{
    test("demo-test", async ()=>{
        axios.get.mockResolvedValueOnce(resp)
        const response = await call()
        expect(response).toEqual(expectedResult)
        
        console.log("axios.get() returns >>>", axios.get.mock.results[0]);
        expect(axios.get).toHaveBeenCalledWith("https://www.example.com")
    })

})
 

Вот ошибка, которую я получаю

 expect(received).toEqual(expected) // deep equality

    - Expected  - 0
      Received    4

      Object {
        "date": " ",
        "email": "",
        "id": "",
        "title": "hello",
        "url": "",
      }

      16 |         axios.get.mockResolvedValueOnce(resp)
      17 |         const response = await call()
    > 18 |         expect(response).toEqual(expectedResult)
         |                          ^
      19 |
      20 |         console.log("axios.get() returns >>>", axios.get.mock.results[0]);
      21 |         expect(axios.get).toHaveBeenCalledWith("https://google.com")
 FAIL  src/call.test.js (7.597 s)
 

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

Комментарии:

1. Можем ли мы предположить, что «когда у userData нет троичных условий», означает, что каждое свойство выглядит примерно так title : response.title ?

2. В ваших expectedResult свойствах date , email , id , url undefined в то время как в call() них есть пустая строка в качестве значения по умолчанию. Так почему же вы ожидаете, что тест пройдет успешно?

3. @Cat да, так и будет title : response.title

4. Какой из них правильно реализован, ваш тест или ваша функция? Если вы ожидаете, что свойства будут инициализированы как undefined , чем ваша реализация теста правильна, и вам нужно изменить свою call() реализацию, чтобы позволить тесту пройти. Если вы ожидаете, что они будут инициализированы как пустые строки, то ваша тестовая реализация неверна, и вам нужно изменить expectedResult объект. Кстати, из вашего кода похоже date , что свойство на самом деле содержит пробел.

5. Другим вариантом может быть то, что в своем тесте вы на самом деле не заботитесь о свойствах, отличных от title (я не знаю, что вы на самом деле пытаетесь здесь протестировать). Если это так, просто измените чек: expect(response.title).toEqual(expectedResult.title)