在Axios进行的笑话测试中,“请求失败,状态码为404”错误

时间:2019-07-19 23:11:11

标签: vuejs2 jestjs axios vuex axios-mock-adapter

我正在Vue应用中运行以下测试:

import axios from 'axios';
import flushPromises from 'flush-promises';
import MockAdapter from 'axios-mock-adapter';
import TenantAlertService from '@/services/TenantAlertService';
import ServiceUrlProvider from '@/utils/ServiceUrlProvider';
import userAlerts from '@/store/modules/userAlerts';
import AlertToPlain from '@/transform/AlertToPlain';
import Alert from '@/models/Alert';

describe('TenantAlertService Service', () => {
  let mock;
  let data;

  const tenantCode = 'RedAlert';
  const id = 'zyx-abc';
  const personId = '123456';
  const appCode = 'asdfklj3';
  const message = {
    text: 'foo',
    template: 'MY_TEMPLATE',
  };
  const person = {
    id: personId,
  };

  const messageUrl = ServiceUrlProvider.gmiUrl()
    .concat('/tenant/')
    .concat(tenantCode)
    .concat('/person/')
    .concat(id)
    .concat('/message');

  const responseUrl = ServiceUrlProvider.gmiUrl()
    .concat('/tenant/')
    .concat(tenantCode)
    .concat('/person/')
    .concat(id)
    .concat('/message/response');

  const sendMessageUrl = ServiceUrlProvider.gmiUrl()
    .concat('/tenant/')
    .concat(tenantCode)
    .concat('/app/')
    .concat(appCode)
    .concat('/template/')
    .concat(message.template)
    .concat('/person/')
    .concat(person)
    .concat('/message');

  beforeEach(() => {
    mock = new MockAdapter(axios);
    data = { response: true };
  });

  it('fetchAll should be called', async () => {
    const messageData = [
      'ele1',
    ];
    const responseData = [
      'ele2',
    ];

    mock.onGet(messageUrl).reply(200, messageData);
    mock.onGet(responseUrl).reply(200, responseData);

    const resp = await TenantAlertService.fetchAll({ tenantCode, id });
    expect(resp.data).toEqual(['ele1', 'ele2']);
  });

  it('sendMessage should be called', async () => {
    mock.onPost(sendMessageUrl).reply(200, data);
    const resp = await TenantAlertService.sendMessage({
      tenantCode,
      appCode,
      personId,
      message,
    });
    expect(resp.status).toBe(200);
  });

  /* Store Actions */
  it('store sendMessage', async () => {
    const context = {
      dispatch: jest.fn(),
      getters: {
        getComponent: 'Component 1',
      },
    };

    mock.onPost(sendMessageUrl).reply(200, new Alert({}));

    userAlerts.actions.sendMessage(context, {
      tenantCode,
      appCode,
      person,
      message,
    });

    await flushPromises();

    expect(context.dispatch).toHaveBeenCalledWith('addOneSorted', new AlertToPlain(new Alert({})));
  });
});

并在最近的两个测试(sendMessage should be calledstore sendMessage)中获得以下结果:


    Request failed with status code 404

      at createErrorResponse (node_modules/axios-mock-adapter/src/utils.js:117:15)
      at Object.settle (node_modules/axios-mock-adapter/src/utils.js:97:16)
      at handleRequest (node_modules/axios-mock-adapter/src/handle_request.js:78:11)
      at node_modules/axios-mock-adapter/src/index.js:18:9
      at MockAdapter.<anonymous> (node_modules/axios-mock-adapter/src/index.js:17:14)
      at dispatchRequest (node_modules/axios/lib/core/dispatchRequest.js:59:10)

我正在为通过的其他19个测试中的axios调用模拟运行完全相同的配置,因此我可以肯定地确定问题不在我的axios配置(例如,here中)。

我是否还缺少其他可能导致此错误的信息?

0 个答案:

没有答案