Я ищу способ автоматического использования метода toString () объекта, используемого в случаях, когда он неявно преобразуется в строку. Например, скажем, у вас есть этот класс:
class Dog {
name: string;
constructor(name: string) {
this.name = name;
}
public toString(): string {
return `${this.name} is my friend`;
}
}
Тогда я обнаружу, что второе из двух утверждений в этом тесте не выполнится:
test.only("Dog", () => {
const dog = new Dog("buddy");
expect(dog.toString()).toBe("buddy is my friend");
expect(dog as any as string).toBe("buddy is my friend"); // fails
});
Я получаю следующую ошибку:
expect(received).toBe(expected) // Object.is equality
Expected: "buddy is my friend"
Received: {"name": "buddy"}
(Примечание: утверждение также не выполняется, если я использую .toEqual
вместо .toBe
.)
Я хотел бы сделать так, чтобы это утверждение прошло, т.е. когда я преобразовать Dog в строку неявным способом, подобным этому (как это может случиться в проекте TypeScript, который начал свою жизнь как проект JavaScript).
Есть предложения, если это возможно? Есть ли способ изменить класс Dog, чтобы разрешить это?