当前位置: 首页 > 知识库问答 >
问题:

模拟和测试要求.解析jest中的调用

连正信
2023-03-14

我想在jest测试套件中模拟一个节点的内置函数require.resolve。下面是Reply.it和代码本身的问题的工作示例:

测试对象(作为示例):

const requirer = () => {
  try {
    return require.resolve('./add')
  } catch (error) {
    console.error('failed to find a module')
  }
}

module.exports = requirer

测试套件:

const requirer = require('./requirer')

describe('attempt to mock require.resolve', () => {
   it('does not work', () => {
     require.resolve = jest.fn(arg => `./${arg}`)
     console.log(
       'is require.resolve mocked',
       jest.isMockFunction(require.resolve)) // will say true

     requirer()

     expect(require.resolve).toHaveBeenCalledTimes(1)
     expect(require.resolve).toBeCalledWith('')
  })
})

在测试套件声明中,一切正常(请参见jest.isMockFunction(require.resolve)的输出),并且模拟工作。但是对于测试主题,require.resolve仍然具有原始功能。

由于这个问题,这不是纯粹的单元测试。

例如,如果我mockprocess.exit所有工作都按预期进行。

共有1个答案

上官羽
2023-03-14

因此,并不是一个完美的解决方案,但将(DI)require.resolve注入到

const requirer = (resolver) => {
  try {
    return resolver('./add')
  } catch (error) {
    console.error('failed to find a module')
  }
}

module.exports = requirer

现在,在一个测试套件中,传递require.resolve的模拟版本可以正常工作

常量requirer=require('./requirer')

describe('attempt to mock require.resolve', () => {
   it('works', () => {
     require.resolve = jest.fn(arg => `./${arg}`)
     console.log(
       'is require.resolve mocked',
       jest.isMockFunction(require.resolve)) // will say true

     requirer(require.resolve)

     expect(require.resolve).toHaveBeenCalledTimes(1)
     // expect(require.resolve).toBeCalledWith('')
  })
})
 类似资料:
  • 我有一个文件,其中包含以下几个helper函数,这些函数在不同的组件中使用。 下面是一个组件,它使用了文件中定义的函数。我正在为组件编写测试,我想模拟这里调用的外部函数。 我对jest/enzyze是新手,我不知道如何模拟外部函数buildoptions。我不知道如何模拟外部的buildOptions功能。有人能帮我做这个吗。下面是我的测试代码:

  • 问题内容: React v15.1.0 Jest v12.1.1 Enzyme v2.3.0 我试图弄清楚如何测试通过单击调用的函数中调用promise的组件。我期望Jest的功能可以在这里为我提供帮助,但似乎并没有执行承诺。 零件: 和测试: 问题答案: 在结束测试之前,不需要太多等待等待的承诺。从您可以看到的代码中,有两种主要的实现方法。 独立测试和您的诺言方法。因此,请检查是否调用了正确的函

  • 问题内容: 模拟按钮单击似乎是非常简单/标准的操作。但是,我无法在Jest.js测试中使用它。 这是我尝试过的(也可以使用jquery进行此操作),但似乎没有触发任何操作: 问题答案: #1使用笑话 这就是我使用笑话嘲笑回调函数来测试click事件的方式 我还使用了一个称为酶的模块 酶是一种测试实用程序,可让您更轻松地断言和选择您的React组件 #2使用Sinon 另外,您可以使用另一个称为si

  • 已删除MyTestConfig.class,但问题仍然相同。即使我使用@SpringBootTest(classes={Application.Class,MyProblematicServiceImpl.Class}),它仍然在自动连线的地方返回模拟对象。MyProblematicServiceImpl是用@Service注释的空类。

  • 我试图理解Jests的异步测试。 我的模块有一个函数,它接受一个布尔值并返回一个值的承诺。executer函数调用 ,在超时回调中,promise根据最初提供的布尔值进行解析或拒绝。代码如下所示: 我想用Jest来测试一下。我想我需要使用Jest提供的模拟计时器,所以我的测试脚本看起来有点像这样: 无论是否调用 ,我都会得到以下错误/失败测试 你能解释一下我哪里出错了吗?我该怎么做才能通过考试,保

  • 在我的React项目中,我正在单元测试一个调用另一个异步函数的异步函数。 尽管每次测试时,结果都是一个空的promise{},而不是预期的数据。我在网上找到了很多模拟异步“getJobStatuses”函数结果的实现,但都没有成功(显示了我在这里使用的实现)。为了测试调用它的函数(getAllJobs),模拟该函数结果的正确方法是什么