【问题标题】:Best way to ignore certain imported functions in jest tests在玩笑测试中忽略某些导入函数的最佳方法
【发布时间】:2021-05-25 20:28:29
【问题描述】:

我正在与 Jest 一起测试 vue 组件。我不想在我的某些函数中测试 axios 调用,因为我希望在不同的地方测试这些调用。

按照我的文件设置方式,我将一个构建 axios 调用的函数导入到我的组件中,如下所示:

我的组件:

import { RepositoryFactroy } from '../services/RepositoryFactory';
const ModelRepo = RepositoryFactory.get('model');

export default {
  methods: {
    async getModelItems() {
      ModelRepo.get(); //calls an axios get for all matching records, needs to be mocked
      OtherCodeThatNeedsToBeRun(); //this needs to run
    }
  }
}

存储库工厂会为您要查找的任何内容(在本例中为“模型”)获取匹配的存储库,并检查相应的存储库,例如 ModelRepository.js 以获取具有 axios 调用所需的任何信息的函数列表,然后将其添加到Repository.js 中声明的 axios 实例中。不确定这是否是必要的信息,但只是想彻底。

假设我想在 getModelItems() 方法中在 Component.vue 上测试一些东西,而不运行我导入的 axios 调用。如何让 Jest 忽略 ModelRepo.get() 呼叫?我是否必须为此创建一个笑话模拟?

编辑

需要明确的是,我需要 getModelItems() 来运行其中的其他代码,并且只需要在该方法中替换 ModelRepo.get() 的功能

【问题讨论】:

    标签: javascript vue.js jestjs axios


    【解决方案1】:

    您可以在安装组件之前模拟该特定模块:

    jest.mock('@/services/RepositoryFactory', () => ({
      RepositoryFactory: {
        get: () => ({
          get: () => {}
        })
      }
    }))
    
    describe('HelloWorld', () => {
      it('foo', () => {
        shallowMount(HelloWorld)
      })
    })
    

    【讨论】:

    • 尝试更新的答案。我验证了它在我的测试设置中有效。如果这不起作用,您可以链接到复制品吗?
    • 经过数小时调试的最佳解决方案谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多