首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Jest spyOn没有检测到我的函数调用

Jest是一个流行的JavaScript测试框架,而spyOn是Jest提供的一个函数,用于监视函数的调用情况。当使用spyOn函数监视一个函数时,它会替换原始函数,并返回一个新的mock函数,可以用于检测函数的调用次数、参数等信息。

如果Jest的spyOn没有检测到你的函数调用,可能有以下几个原因:

  1. 函数未被正确导入:首先要确保你正确地导入了要监视的函数。检查一下导入路径和文件名是否正确。
  2. 函数未被正确调用:确保你在测试代码中正确地调用了被监视的函数。检查一下函数的调用位置和参数是否正确。
  3. 函数被异步调用:如果被监视的函数是在异步代码中被调用的,可能会导致spyOn无法正确检测到函数的调用。在这种情况下,你可以考虑使用Jest提供的异步测试工具,如async/await或Jest的定时器模拟函数。
  4. 函数被其他模块修改或覆盖:如果被监视的函数在被导入后被其他模块修改或覆盖了,可能会导致spyOn无法正确检测到函数的调用。在这种情况下,你可以尝试使用Jest的jest.mock函数来模拟整个模块,以确保被监视的函数不会被修改或覆盖。

总结起来,如果Jest的spyOn没有检测到你的函数调用,你需要确保函数正确导入、正确调用,并注意处理异步调用和其他模块的修改或覆盖。如果问题仍然存在,可以进一步检查Jest的配置和版本,或者查阅Jest的官方文档和社区支持获取更多帮助。

腾讯云相关产品推荐:

  • 云函数(Serverless Cloud Function):腾讯云的无服务器计算产品,可用于快速部署和运行代码,支持多种语言和触发器方式。详情请参考:云函数产品介绍
  • 云开发(Tencent CloudBase):腾讯云的一站式后端云服务,提供云函数、云数据库、云存储等功能,可用于快速开发和部署应用。详情请参考:云开发产品介绍
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Jest单元测试之旅—实践总结

其中toEqual是jest提供的匹配器,jest提供了非常多的匹配器,这里列举一些常用: toBe:使用Object.is精准匹配 toEqual:相比toBe会做深层比较,一般用于检测对象的值 toBeNull...resolves/rejects:Jest会等待异步函数执行完毕该方法应该和async/await配合使用 手动调用done:在我们没有调用done之前,当前测试不会结束,直至调用done方法,有点类似回调...toBeCalled(); }); }) 运行后发现fn被调用的0次,测试用例并没有通过。...,js会先执行其他任务(expect),再执行微任务,这样导致我们的fn断言时并没有被调用。...,用于代替我们的真实函数,可以通过该模块函数提供的方法获取调用信息(.mock方法)。

10.3K20

使用Jest测试包含setTimeout调用的函数踩坑记录

回到我们的测试用例,原因也就明确了:调用enqueueJob之后,catch中的回调被加入了队列,而随后的delay则相当于直接调用了setTimeout(前面说到Promise对象构造时的回调函数是立刻执行的...根据Jest的官方文档,调用这个函数后,所有队列中的“微任务”都会被立刻执行,这里的目的就是保证catch回调能被立刻调用; 使用jest.advanceTimersByTime(6000)代替await...咳咳……也就是说,Promise所使用的微任务队列又是另外一个微任务队列,并且不归Jest控制! 因此,问题也明确了:runAllTicks什么作用也没有发挥,我们回到了最初遇到的问题。...提供的spy函数,对setTimeout函数进行了拦截侦听,被调用时不做任何事。...断言通过后,我们再手动调用传入的回调函数来模拟6s已经经过的场景。

6.9K60
  • JavaScript测试教程–part 4:模拟 API 调用和模拟 React 组件交互

    (例如 fs 或 path ),则需要在模拟文件中明确调用 jest.mock('moduleName') Jest 允许我们对函数进行监视:接下来测试是否调用了我们所创建的 get 函数。...spyOn 函数返回一个 mock函数。有关其功能的完整列表,请阅读文档。我们的测试检查组件在渲染和运行之后是否从模拟中调用 get函数,并成功执行。...,请记住清除每个测试之间的模拟调用,例如通过运行 getSpy.mockClear(),否则函数调用的次数将在测试之间保持不变。...simulate 函数调用。...从测试中返回 promise 是能够确保 Jest 等待其解决的一种方法。 总结 在本文中,我们介绍了模拟模块,并将其用于伪造 API 调用。由于没有发出实际的请求要求,我们的测试可以更可靠、更快。

    3.7K10

    React Hook测试指南

    mock 在Jest框架中用来进行mock的方法有很多,主要用到的是jest.fn()和jest.spyOn()。...jest.fn生成的函数上面有很多属性,我们也可以通过一些matcher来对这个函数的调用情况进行一些断言,下面是一个简单的例子: // somewhere/functionWithCallback.js...我们源代码中的函数可能使用了另外一个文件或者node_modules中安装的一些依赖,这些依赖可以使用jest.spyOn来进行mock,下面是一个简单的例子: // somewhere/sum.js...这样我们除了可以保证validateNumber不会影响到我们对sum函数逻辑的测试,还可以在外面对validateNumberMock进行一些断言(assertion)来验证sum逻辑的正确性。...,它的第一个参数是一个callback函数,这个函数会在TestComponent每次被重新渲染的时候调用,因此我们可以在这个函数里面调用我们想要测试的hook。

    1.7K10

    单元测试

    @testing-library/jest-dom 是一个用于增强 Jest 测试框架的库,它提供了一组用于 DOM 断言的定制化匹配器和工具函数。...: 分支覆盖率,执行到每个 if 代码块; Functions: 函数覆盖率,调用到程序中的每一个函数; Lines: 行覆盖率,执行到程序中的每一行。...(); }); test("可以在 1000ms 后自动执行函数", () => { jest.spyOn(global, "setTimeout"); const callback...这样可以确保每个测试用例都在相同的初始状态下运行,并且没有残留的状态或影响。 在每个测试用例之后使用 afterEach 函数或 afterAll 函数来清理测试环境。...因此,callback 可在不确定的时间和频率(在间隔以及 DOM 变化时调用)被调用(或者检查错误)。所以这也意味着你的副作用可能会被多次调用!

    31210

    那些年错过的React组件单元测试(上)

    如果test函数传入了done,jest就会等到done被调用才会结束当前的test case,如果done没有被调用,则该test自动不通过测试。...jest中与mock相关的api主要有三个,分别是jest.fn()、jest.mock()、jest.spyOn()。使用它们创建mock函数能够帮助我们更好的测试项目中一些逻辑较复杂的代码。...jest.fn() jest.fn()是创建mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn()会返回undefined作为返回值。...jest.spyOn() jest.spyOn()方法同样创建一个mock函数,但是该mock函数不仅能够捕获函数的调用情况,还可以正常的执行被spy的函数。...实际上,jest.spyOn()是jest.fn()的语法糖,它创建了一个和被spy的函数具有相同内部代码的mock函数。 Snapshot 快照测试 所谓snapshot,即快照也。

    5K20

    编写接口请求库单元测试与 E2E 测试的思考

    Unit Test 再说说单测,一般接口库也主要做这类测试比较多,因为单测不需要实际去访问接口,都是用 mock 的方式去伪造一个数据,而用 Jest 的话就直接 spyOn 去 mock 掉整个请求方法了...你只需要测试自己的业务逻辑就行了。 而对于这个库而言只需要测试有没有注入 adaptor 后,用 adaptor 请求数据之后有没有拿到了正确的值。...如图所示,只需要测试 core 的逻辑,也就是注入 adaptor 之后有没有正确使用 adaptor 去请求,以及用 adaptor 请求拿到数据之后有没有正确处理数据。...() 4 }) 5 test('case 1', async () => { 6 jest.spyOn(axiosAdaptor, 'get').mockImplementation...spyOn 掉了 adaptor 的 get 方法,而要测试的则是 core 层有没有正确使用 adaptor 访问了正确的路径。

    1.1K40

    React 设计模式 0x8:测试

    有两种方法可以实现这一点,包括以下内容: 功能测试 渲染测试 # 功能测试 功能测试是一种测试,用于验证函数按预期工作,这个测试通常根据被测试的函数的预期结果进行断言。...模拟函数 使用 模拟函数 来侦测(查看)我们的函数被调用的情况,或者使用它来测试单个函数或整个模块。...在 Jest 中有以下三种类型的模拟函数: Jest.fn(用于模拟单个函数) Jest.mock(用于模拟整个模块) Jest.spyOn(用于查看函数的调用情况) 更多信息请访问 https://jestjs.io...React 组件的工具和函数 编写测试用例 编写完整的测试用例,覆盖组件的所有代码路径,包括正常情况和异常情况 使用快照测试 使用 Jest 中的快照测试功能来验证组件是否按预期呈现 使用模拟数据...使用模拟数据来测试组件,以确保它们在不同的数据情况下都能正常工作 使用模拟函数 使用模拟函数来模拟组件的依赖项和外部接口,以便更好地控制测试环境 集成测试 编写集成测试来测试应用程序的整个流程

    1.8K10

    浅谈前端测试

    在第一个 test 里面我们改写 mocks.fs.readFileSync 的返回形式,这里使用的 mockImplementation 是直接模拟了一个执行函数,当然也可以模拟返回值,具体可以到...方法使得测试达到我们预期的目的,在这个简单的场景里面我们只需要模拟返回值就好   2.expect(console.log) 这里会报错,因为 jest 断言的内容只能是 mock function...或 spy,这里 console 是全局对象 global 上的方法,我们没有 require 将其引入,所以 jest.mock 显然处理上有些吃力,这时候 spy 就派上用场了,beforeAll...钩子里直接执行 jest.spyOn(global.console, 'log'),接下来我们就能监听到 console.log 的执行了 expect(global.console.log)   3....  那就聊一聊解决方案   mock 数据的随机化,每次测试生成随机的 list 进行测试,现有库 mockjs   强关联测试,证明 map 方法的确执行了,并且参数正确,先 spy spyOn(Array.prototype

    1.7K10

    前端单元测试那些事

    分支覆盖率(branch coverage)是否每个函数都调用了? 函数覆盖率(function coverage)是否每个if代码块都执行了?...当我们完成单元测试覆盖率达不到100%,不用慌,不用过度追求100%的覆盖率,把核心的功能模块测通即可,当然如果你要设置最低的覆盖率检测,可以在配置中加入如下,如果覆盖率低于你所设置的阈值(80%),则测试结果失败不通过...API,分别是jest.fn()、jest.spyOn()、jest.mock() jest.fn() - 是创建Mock函数最简单的方式,如果没有定义函数内部的实现,jest.fn()会返回undefined...对象执行了回调函数 注:有时候会存在一种情况,在同个组件中调用同个方法,只是返回值不同,我们可能要对它进行多次不同的mock,这时候需要在beforeEach使用restoreAllMocks方法重置状态...mock的目的: 设置函数返回值 获取获函数调用情况 改变原本函数的内部实现 4. ️

    4.5K40

    Vue 应用单元测试的策略与实践 02 - 单元测试基础

    本文的目标 在 TDD 做完 Tasking 列完实例化数据之后,完全没有 UT 基础不知道该怎么写单元测试? // Given 一个完全没有UT基础的新人? // When 当他?...,一般来说就是调用相应的模块执行对应的函数或方法 Then Assert 断言,这时需要借助的就是 Matchers 的能力,Jest 还可以扩展自己的 Matcher 在 expect 后面的 toBe...想象一下你正在测试一个 Order Class 的 price() 方法,而 price() 方法需要在 Product 和 Customer Class 中调用一些函数。...}; }); }); 我们可以看到 jest.mock() 方法中的第二个参数是一个函数,那么我们就可以完全接管整个 ..../video'); it('plays video', () => { const spy = jest.spyOn(video, 'play'); const isPlaying = video.play

    2.2K20
    领券