【问题标题】:Mock object with jest and pass via it via method parameter用 jest 模拟对象并通过方法参数传递
【发布时间】:2021-07-11 15:08:11
【问题描述】:

我正在尝试使用 jest 模拟整个对象(来自 ag-grid 的 ColumnApi),然后通过参数将其传递给某个函数,该函数从 ColumnApi 调用方法“getAllColumns”。我不在乎“getAllColumns”是如何工作的,但我希望它返回一些特定的列数组(Column[])。我怎样才能创建这个对象/模拟能够同时:

  • 通过参数将其传递给某些需要 ColumnApi 类型的函数
  • 此对象的一个​​函数的模拟返回值。

测试:

describe("test", () => {
   
    // my fruitless tries to create the mock / object:


    // let columnApi: ColumnApi {};

    // const spyInstance = jest.spyOn(columnApi, "getAllColumns");
    // const mock = jest.fn().mockImplementation(()=> "abc");

    // jest.mock("@ag-grid-community/core/dist/cjs/columnController/columnApi", () => columnApi);

    // const columnApiSpy = jest.spyOn(ColumnApi, "getAllColumns");
    //
    // jest.mock("./main", () => ({
    //     columnApi: ,
    // }));
    // let columnApiMock: jest.Mock<ColumnApi>;

    const params = {
        columnApi: columnApi,
    }

    beforeEach(async () => {
        await repository.getRows(params);
    });
});

来自存储库的“getRows”函数:

getRows(columnApi: ColumnsApi) {
    
    columnApi.getAllColumns());

}

【问题讨论】:

    标签: typescript vue.js jestjs mocking ag-grid


    【解决方案1】:

    我认为你只需要模拟间谍的实现。最好在 beforeEach 中执行此操作(这样 jest 可以更改以在测试之间删除间谍)。

    import columnApi from '@ag-grid-community/core/dist/cjs/columnController/columnApi'
    
    describe('test', () => {
      beforeEach(() => {
        jest.spyOn(columnApi, 'getAllColumns').mockImplementation(() => "abc")
        await repository.getRows({ columnApi });
      })
    })
    

    不管columnApi是什么,或者它是如何导入的,都应该替换实现。

    【讨论】:

    • 我试过这个(可以在注释掉的代码中看到) - 它不起作用,因为 columnApi 的类型不是 ColumnApi (我假设你想用 let columnApi 创建它: ColumnApi {};) 如果没有 ColumnApi 类型,我无法将其传递给 repository.getRows(...) 方法
    【解决方案2】:

    我的问题的答案是创建一个定义了方法“getAllFunctions”的对象。这可以通过以下方式完成:

    let columns: Column[] = {};
    let columnApi: {
    getAllColumns: columns,
    }
    

    然后我能够将对象columnApi 传递给params 对象并将其传递给repository.getRows 方法。无需模拟/监视,只需根据需要创建我自己的对象类型即可。

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2017-03-06
      • 2013-05-14
      • 2016-04-26
      • 2022-11-10
      • 2011-04-26
      • 2011-05-11
      • 2012-05-20
      • 2015-02-05
      相关资源
      最近更新 更多