如何测试一个变量设置为随机的 Apollo 突变?

Posted

技术标签:

【中文标题】如何测试一个变量设置为随机的 Apollo 突变?【英文标题】:How to Test Apollo mutation with one variable set to random? 【发布时间】:2021-12-06 00:48:24 【问题描述】:

我正在使用 Appolo Mock 提供程序测试我的组件。但是,我有这个突变查询,其中我的一个变量设置为随机 UUID。我怎么能测试它?由于我的查询与我的模拟不匹配,它给了我一个没有模拟响应的错误,请帮助 tnx。

组件

const [createMenuProduct,  loading ] = useMutation(CREATE_MENU_PRODUCTS);

createMenuProduct(
  variables: 
    menuId: menuId,
    id: uuid(),
    productId: selectedProduct,
  ,
);

测试模拟

 
    request: 
      query: CREATE_MENU_PRODUCTS,
      variables: 
        menuId: menuId,
        id: uuid(),
        productId: '4b1b6048-6cb1-46e0-ab4d-80fd11ebeacb',
      ,
    ,
    result: 
      data: 
        insertMenuProducts: 
          returning: [
            
              menu_id: 'b591993d-af18-4bf5-88ad-26f08691afc7',
              product_id: '4b1b6048-6cb1-46e0-ab4d-80fd11ebeacb',
              product: 
                variant: 
                  id: '04befbe6-9635-4dde-abc2-673af13eb462',
                  isDeleted: false,
                  productVariantAddOns: [],
                ,
              ,
            ,
          ],
        ,
      ,
    ,
  ,

由于我无法将我的模拟变量与预期的值匹配,目前我遇到了这个错误

【问题讨论】:

uuid() 来自哪里? 【参考方案1】:

你可以mockuuid()返回的值与模拟中的相同

const uuidVariable = 'mocked-uuid';

...

  request: 
    query: CREATE_MENU_PRODUCTS,
    variables: 
      menuId: menuId,
      id: uuidVariable,
      productId: '4b1b6048-6cb1-46e0-ab4d-80fd11ebeacb',

...

在你的测试中

import uuid from 'uuid/v4';
jest.mock('uuid/v4');

describe('some component', () => 
  it('call mutation', () => 
    uuid.mockImplementation(() => uuidVariable);
    // here render component and interact to fire the mutation
  );  
);

【讨论】:

您好需要通过该模拟,因为在此之后我仍然有其他突变,目前我遇到此错误 查询没有更多模拟响应:突变 insertMenuProducts @EileenDeGuzman 即使我在回答中提出了更改,您是否仍然收到错误?

以上是关于如何测试一个变量设置为随机的 Apollo 突变?的主要内容,如果未能解决你的问题,请参考以下文章

在执行 Apollo 突变之前映射变量

如何在使用表单组件时在 apollo-client 中链接突变

对象作为突变中的输入变量:GraphQL - Apollo - React

使用突变响应更新 apollo 客户端

Apollo + Angular 突变不适用于变量

使用 MockedProvider 进行测试时使用 Apollo 突变更新存储