【问题标题】:Mock multiple api call inside one function using Moxios使用 Moxios 在一个函数中模拟多个 api 调用
【发布时间】:2020-07-15 06:34:35
【问题描述】:

我正在为我的服务类编写一个测试用例。我想在一个函数中模拟多个调用,因为我正在从一个函数进行两次 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;
  }

【问题讨论】:

    标签: jestjs moxios


    【解决方案1】:

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

    我的(不理想的)解决方案是对除最后一个请求之外的每个请求使用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");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2021-12-31
      • 2018-01-21
      相关资源
      最近更新 更多