如何模拟特定功能而不影响同一个ES6类中的其他功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何模拟特定功能而不影响同一个ES6类中的其他功能?相关的知识,希望对你有一定的参考价值。

这是我的项目:

模拟测试Dependency.js:

export default class MockTestDependency {
    testAction1() {
        return 'testAction1'
    }

    testAction2() {
        return 'testAction2'
    }
}

模拟Test.test.js:

jest.mock('./MockTestDependency')

import MockTestDependency from './MockTestDependency'

beforeAll(() => {
    MockTestDependency.mockImplementation(() => {
            return {
                testAction1: () => {return 'mocked1'},
            }
        }
    )
})

describe('mock test 3', () => {
    it('first case', () => {
        let mockTestDependency = new MockTestDependency()
        expect(mockTestDependency.testAction1()).toBe('mocked1')
        expect(mockTestDependency.testAction2()).toBe('testAction2')
    })
})

运行jest命令后发生错误:

TypeError: mockTestDependency.testAction2 is not a function

那么,如何模拟功能testAction1而不影响功能testAction2

任何帮助,将不胜感激。

答案

看看jest.spyOn()函数,它允许模拟只选择的方法。当你使用jest.mock('./MockTestDependency')时,它会将模块中的所有方法嘲弄到jest.fn()

import MockTestDependency from './MockTestDependency'

beforeAll(() => {
    jest.spyOn(MockTestDependency, 'testAction1').mockImplementation(() => 'mocked1');
})

describe('mock test 3', () => {
    it('first case', () => {
        let mockTestDependency = new MockTestDependency()
        expect(mockTestDependency.testAction1()).toBe('mocked1')
        expect(mockTestDependency.testAction2()).toBe('testAction2')
    })
})

以上是关于如何模拟特定功能而不影响同一个ES6类中的其他功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jest 模拟对象中的特定函数?

如何在 ES6 类中声明公共函数?

调用函数onclick on some buttons而不影响单个onclick函数的按钮(已经为按钮分配) - JavaScript

如何只重写特定的URL而不影响其他文件

ES6 class类中定义私有变量

如何在__mocks__文件夹中使用模拟文件在ES6类中手动模拟方法?