在使用 Jest 进行单元测试时,模拟类和命名空间枚举是常见的需求。以下是如何在 Jest 中模拟类和命名空间枚举的详细步骤。
假设你有一个类 MyClass
,你想在测试中模拟它。
// myClass.js
class MyClass {
constructor() {
this.value = 42;
}
getValue() {
return this.value;
}
setValue(newValue) {
this.value = newValue;
}
}
module.exports = MyClass;
在 Jest 中,你可以使用 jest.mock
来模拟类。你可以通过 jest.fn
创建模拟函数,并覆盖类的方法。
// myClass.test.js
const MyClass = require('./myClass');
jest.mock('./myClass', () => {
return jest.fn().mockImplementation(() => {
return {
getValue: jest.fn().mockReturnValue(100),
setValue: jest.fn()
};
});
});
test('should use mocked class', () => {
const myClassInstance = new MyClass();
expect(myClassInstance.getValue()).toBe(100);
myClassInstance.setValue(200);
expect(myClassInstance.setValue).toHaveBeenCalledWith(200);
});
假设你有一个命名空间枚举 MyEnum
,你想在测试中模拟它。
// myEnum.ts
export namespace MyEnum {
export enum Colors {
RED = 'red',
GREEN = 'green',
BLUE = 'blue'
}
}
在 Jest 中,你可以使用 jest.mock
来模拟命名空间枚举。你可以通过 jest.fn
创建模拟值,并覆盖枚举的值。
// myEnum.test.ts
import { MyEnum } from './myEnum';
jest.mock('./myEnum', () => {
return {
MyEnum: {
Colors: {
RED: 'mocked_red',
GREEN: 'mocked_green',
BLUE: 'mocked_blue'
}
}
};
});
test('should use mocked enum', () => {
expect(MyEnum.Colors.RED).toBe('mocked_red');
expect(MyEnum.Colors.GREEN).toBe('mocked_green');
expect(MyEnum.Colors.BLUE).toBe('mocked_blue');
});
领取专属 10元无门槛券
手把手带您无忧上云