3

我正在为我的服务类编写一个测试用例。我想在一个函数中模拟多个调用,因为我正在从一个函数进行两次 API 调用。我尝试关注但它不起作用

it('should get store info', async done => {
      const store: any = DealersAPIFixture.generateStoreInfo();
      moxios.wait(() => {
        const request = moxios.requests.mostRecent();
        request.respondWith({
          status: 200,
          response: store
        });
        const nextRequest = moxios.requests.at(1);
        nextRequest.respondWith({
          status: 200,
          response: DealersAPIFixture.generateLocation()
        });
      });
      const params = {
        dealerId: store.dealerId,
        storeId: store.storeId,
        uid: 'h0pw1p20'
      };
      return DealerServices.retrieveStoreInfo(params).then((data: IStore) => {
        const expectedOutput = DealersFixture.generateStoreInfo(data);
        expect(data).toMatchObject(expectedOutput);
      });
    });

const nextRequest 始终未定义

它抛出错误TypeError: Cannot read property 'respondWith' of undefined

这是我的服务班

static async retrieveStoreInfo(
    queryParam: IStoreQueryString
  ): Promise<IStore> {
    const res = await request(getDealerStoreParams(queryParam));
    try {
      const locationResponse = await graphQlRequest({
        query: locationQuery,
        variables: { storeId: res.data.storeId }
      });
      res.data['inventoryLocationCode'] =
        locationResponse.data?.location?.inventoryLocationCode;
    } catch (e) {
      res.data['inventoryLocationCode'] = 'N/A';
    }
    return res.data;
  }
4

1 回答 1

0

聚会迟到了,但我今天不得不解决同样的问题。

我的(不是理想的)解决方案是moxios.stubRequest用于除最后一个请求之外的每个请求。该解决方案基于moxios.stubRequest将请求推送到的事实moxios.requests,因此,您将能够在响应最后一次调用后分析所有请求。

代码看起来像这样(考虑到您有 3 个请求要做):

moxios.stubRequest("get-dealer-store-params", {
  status: 200,
  response: {
    name: "Audi",
    location: "Berlin",
  }
});

moxios.stubRequest("graph-ql-request", {
  status: 204,
});

moxios.wait(() => {
  const lastRequest = moxios.requests.mostRecent();
  
  lastRequest.respondWith({
    status: 200,
    response: {
      isEverythingWentFine: true,
    },
  });

  // Here you can analyze any request you want
  
  // Assert getDealerStoreParams's request
  const dealerStoreParamsRequest = moxios.requests.first();
  expect(dealerStoreParamsRequest.config.headers.Accept).toBe("application/x-www-form-urlencoded");

  // Assert graphQlRequest
  const graphQlRequest = moxios.requests.get("POST", "graph-ql-request");
  ...

  // Assert last request
  expect(lastRequest.config.url).toBe("status");
});
于 2021-07-02T21:07:30.910 回答