Как проверить состояние отклонения Axios с помощью Jest - PullRequest
1 голос
/ 13 мая 2019

Я написал модульный тест для некоторых вызовов Axios в моем компоненте.Я проверил путь успеха, где вызов успешно разрешается, но я не могу проверить путь отказа, где вызов отклоняется.Как мне использовать mocks для проверки этого?

Вот фрагмент моего FetchImage.vue компонента:

methods: {
  preparedFetch() {
    axios.get(this.imageurl).then(result => {
      this.imageInformation.title = result.data.title;
      this.imageInformation.copyright = result.data.copyright;
      this.imageInformation.detailExplanation = result.data.explanation;
      this.imageInformation.date = result.data.date;
      this.imageInformation.urlinfo = result.data.url;
      this.resultArrived = true;
      this.$emit('imagefetched',this.imageInformation);
    })
    .catch( error => {
      this.errorMessage = "Information not found";
      this.resultArrived = true;
    });
  }
}

И мой тест на случай отклонения вызова (для неверного URL):

describe('Invalid response',async () => {
  beforeEach(() => {
    axios.get.mockClear();
    axios.get.mockReturnValue(Promise.reject({}));
  });
  it('Invalid URL verfication', async () => {
    // Given
    const result = {
        errorMessage : "Information not found",
        resultArrived : true,
        fetchStatus : true
    };
    // Fetch the error result
    axios.get.mockReturnValue(Promise.resolve(result));
    const fetchwrapper = mount(FetchImage);
    fetchwrapper.vm.imageurl = "https://invalid.request.gov";
    fetchwrapper.vm.preparedFetch();
    await fetchwrapper.vm.$nextTick();
    // Validate the result
    expect(axios.get).not.toHaveBeenCalledWith('https://api.nasa.gov/planetary/apod?api_key=vME6LAMD7IhEiy7rDmjfIaG6MhiKbu1MNIqxtqd1');
    expect(axios.get).toHaveBeenCalledWith("https://invalid.request.gov");
    expect(axios.get).toHaveBeenCalledTimes(1);
    expect(fetchwrapper.vm.errorMessage.length).not.toEqual(0);
    expect(fetchwrapper.vm.errorMessage).toBe("Information not found");
  });
});

1 Ответ

0 голосов
/ 13 мая 2019

Ваш блок catch не запущен, потому что фиктивное возвращаемое значение использует Promise.resolve(), когда оно действительно должно быть Promise.reject():

describe('Invalid response',async () => {
  it('Invalid URL verfication', async () => {
    // axios.get.mockReturnValue(Promise.resolve(result)); // DON'T DO THIS
    axios.get.mockReturnValue(Promise.reject(result));
  });
});
...