Axios.all和Axios.spread的玩笑测试

时间:2019-05-13 06:27:25

标签: vue.js jestjs axios

我正在努力为以下方法编写JEST测试用例

const button = document.getElementById("btn");

const myObservable = fromEvent(button, 'click');

myObservable.subscribe(c => {console.log('clicked')});

它使用axios.all和axios.spread取回数据。.我已经为Axios.get写了简单的测试用例,但是如何为此编写测试用例?此方法在服务类的vue项目中

1 个答案:

答案 0 :(得分:1)

这是一个简短的示例,说明了如何为上面的代码编写期望(覆盖率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]);
          });
        });
      });
    });
  });
});

working example

相关问题