0

我在 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 called并在最后两个测试(和)中获得以下结果store 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 配置(例如,如此所示)。

我还缺少其他可能导致此错误的东西吗?

4

0 回答 0