我有一个函数,可以将大写字符串转换为大写字母前面带有破折号的字符串,并使字符串小写。
formattedType() {
// Adds a dash before the uppercase and make everything lowercase
const type = this.props.type?.split(/(?=[A-Z])/).join("-").toLowerCase();
return type;
}
describe("formattedType method", () => {
it("should transform the string into lowercase with a dash as seperator", () => {
// given
FormTrack.prototype.props.type= 'testOption';
// when
const actualResult = FormTrack.prototype.formattedFormType();
// then
expect(actualResult).toBe('test-option');
});
});
但是我收到以下错误:
Cannot assign to 'type' because it is a read-only property
如何模拟 props 类型来覆盖功能
formattedType()
您可以使用静态方法 Object.defineProperty 直接在对象上定义新属性或修改对象上的现有属性。
例如:
describe("formattedType method", () => {
it("should transform the string into lowercase with a dash as seperator", () => {
// given
Object.defineProperty(FormTrack.prototype.props, 'type', {value: 'testOption' });
// when
const actualResult = FormTrack.prototype.formattedFormType();
// then
expect(actualResult).toBe('test-option');
});
});
您可以将类型转换为新类型,其中所有属性都是可变的。
导出类型 Mutable = { -readonly [P in keyof T]: T[P] } export const asMutable = (value: T): Mutable => value as Mutable
asMutable(FormTrack.prototype.props).type