шутливые тесты для Axios.all и Axios.spread - PullRequest
0 голосов
/ 13 мая 2019

Я изо всех сил пытаюсь написать тестовые примеры JEST для метода ниже

getStudentList (studentList:}[]) {

    if (studentList.length < 1) {
      Promise.resolve()
    }
    let promises = []
    for (const student of StudentList) {
      if (!student.name) {
        Promise.resolve()
      }
      var url = `${API_URL}/${student.name}/`

      promises.push(Axios.get(url}))
    }

    return Axios.all(promises)
      .then(Axios.spread((...args) => {
        // customise the response here
        return args
          .map(response => response.data)
          .map(data => {
            //do something with data
            return data
          })
      }))

Он использует axios.all и axios.spread для получения данных .. я написал простые тестовые случаи для Axios.get..но как написать тестовый пример для этого? Этот метод находится в проекте vue в классе обслуживания

1 Ответ

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

Это краткий пример того, как вы можете написать свои ожидания (со 100% покрытием) для кода выше:

import myService from './myService';
import Axios from 'axios';

jest.mock('axios');

global.API_URL = 'http://example.com/mock_api';

describe('myService', () => {
  describe('getStudentList', () => {
    describe('without students in the list', () => {
      it('should result undefined', () => {
        const result = myService.getStudentList();
        expect(result).resolves.toEqual( undefined );
      });
    });

    describe('with students in the list', () => {
      const mockStudentList = [{
        name: 'student1',
      }, {
        someProp: 'some value',
      }, {
        name: 'student3',
      }];

      const results = [];
      const mockAxiosSpreadResult = jest.fn();

      beforeAll(() => {
        Axios.get.mockClear();
        Axios.all.mockResolvedValue(results);
        Axios.spread.mockReturnValue(mockAxiosSpreadResult);
        myService.getStudentList( mockStudentList );
      });

      it('should call Axios.get once for each student with name', () => {
        expect(Axios.get).toHaveBeenCalledWith(`${API_URL}/student1/`);
        expect(Axios.get).toHaveBeenCalledWith(`${API_URL}/student3/`);
      });

      it('should call Axios.spread with a callback', () => {
        expect(Axios.spread).toHaveBeenCalledWith(expect.any(Function));
      });

      it('should call the result of Axios.spread with the resolved value of Axios.all', () => {
        expect(mockAxiosSpreadResult).toHaveBeenCalledWith(results);
      });

      describe('Axios.spread callback', () => {
        let callback;
        beforeAll(() => {
          callback = Axios.spread.mock.calls[0][0];
        });

        describe('called with parameters', () => {
          let result;
          beforeAll(() => {
            result = callback({
              data: 1
            },{
              data: 2
            },{
              data: 3
            },{
              data: 4
            });
          });

          it('should do something with the data', () => {
            expect(result).toEqual([1,2,3,4]);
          });
        });
      });
    });
  });
});

рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...