
AI
使用 Jest 的 expect.objectContAIning() 在 expect.toHaveBeenCalled() 中失败
在进行单元测试时,我们经常需要验证某个函数是否被正确调用。在 Jest 中,我们可以使用 expect.toHaveBeenCalled() 来实现这个功能。然而,有时我们可能只关心函数是否被调用,并不关心具体的参数。这时,我们可以使用 expect.objectContAIning() 来验证函数是否被调用,并且传入的参数包含我们所期望的一部分。什么是 expect.objectContAIning()在 Jest 中,expect.objectContAIning() 是一个匹配器(matcher)。它用于验证一个对象是否包含另一个对象的部分属性。我们可以使用它来验证函数调用时传入的参数是否符合我们的预期。如何使用 expect.objectContAIning()下面我们来看一个简单的示例,假设我们有一个名为 fetchData() 的函数,它接受一个包含 url 和 method 的对象作为参数,并返回一个 Promise 对象。Javascript// fetchData.JSconst fetchData = (config) => { // ... 省略实际的异步请求逻辑 ...};module.exports = fetchData;现在我们想要测试 fetchData() 函数是否正确调用了 axIOS.get() 方法,并且传入了包含特定 url 和 method 的参数。我们可以使用 expect.objectContAIning() 来实现这个验证。Javascript// fetchData.test.JSconst axIOS = require('axIOS');const fetchData = require('./fetchData');jest.mock('axIOS');test('fetchData should call axIOS.get with correct parameters', () => { const mockResponse = { data: 'Mock data', }; const mockConfig = { url: 'https://api.example.com', method: 'GET', }; axIOS.get.mockResolvedValue(mockResponse); fetchData(mockConfig); expect(axIOS.get).toHaveBeenCalledWith( expect.objectContAIning({ url: 'https://api.example.com', method: 'GET', }) );});在这个例子中,我们首先使用 jest.mock() 来模拟 axIOS 模块。然后,我们创建了一个 mockResponse 对象作为 axIOS.get() 方法的返回值,创建了一个 mockConfig 对象作为 fetchData() 函数的参数。接着,我们使用 axIOS.get.mockResolvedValue() 来指定 axIOS.get() 方法的返回值。最后,我们调用 fetchData() 函数,并使用 expect.objectContAIning() 来验证 axIOS.get() 方法是否被正确调用并传入了我们所期望的参数。为什么 expect.objectContAIning() 可能失败尽管 expect.objectContAIning() 可以方便地验证函数参数的一部分,但它并不是万能的。在某些情况下,我们可能会遇到验证失败的情况。在 Jest 中,使用 expect.objectContAIning() 可以方便地验证函数调用时传入的参数是否包含我们所期望的部分属性。然而,我们需要注意 expect.objectContAIning() 不能验证对象的完整性,它只能验证是否包含一部分属性。在编写单元测试时,我们应该根据具体的需求选择合适的匹配器,以确保我们的测试能够准确地验证代码的行为。希望本文对你在使用 Jest 进行单元测试时有所帮助!Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号