Rhum 无法模拟 Typescript 中的 Mixin class
Mixin class in Typescript cannot be mocked by Rhum
大家好,我的这段代码在最后一行失败了。一旦它被注释掉,它就会按预期通过。问题是在模拟 mixin class.
时
有人对如何处理这个问题有任何想法、建议或想法吗?
我是运行这个人:
- Deno 1.19.3
- 打字稿 4.5.2
谢谢。
import { Rhum } from "https://deno.land/x/rhum@v1.1.10/mod.ts";
import { assertInstanceOf } from "https://deno.land/std@0.132.0/testing/asserts.ts";
export interface IGame {}
export class NullGame implements IGame {}
function WithGameProperty() {
return <T extends new (...args: any[]) => any>(GameProperty: T) => {
return class extends GameProperty {
private game: IGame = new NullGame();
public set Game(game: IGame) {
this.game = game;
}
public get Game() {
return this.game;
}
};
};
}
const PlayersEngine = WithGameProperty()(
class PlayersEngine {
onNextGenerationReady(listener: () => void): void {
// add listener to react on an event
}
prepareNextGeneration(): void {
// do some stuff and trigger an event
}
},
);
const pe = new PlayersEngine();
pe.Game = new NullGame();
assertInstanceOf(pe.Game, NullGame);
Rhum.mock(NullGame).create();
Rhum.mock(PlayersEngine).create();
作为参考,我是 Rhum 的维护者之一。
问题在于 Rhum 的内部代码,我们获取属性的逻辑不适用于 getter 和 setter。我试过这个并设法得到了一个有效的修复,所以它根本不是你的代码。
例如:
let desc = Object.getOwnPropertyDescriptor(original, property);
if (desc === undefined) {
// property is a getter or setter
desc = Object.getOwnPropertyDescriptor(this.constructor_fn.prototype, property)
}
// We can now use `desc.value`
我将为此添加一个修复程序和一个测试用例,并将在今晚发布一个新的补丁版本,所以请密切关注发布:)
大家好,我的这段代码在最后一行失败了。一旦它被注释掉,它就会按预期通过。问题是在模拟 mixin class.
时有人对如何处理这个问题有任何想法、建议或想法吗?
我是运行这个人:
- Deno 1.19.3
- 打字稿 4.5.2
谢谢。
import { Rhum } from "https://deno.land/x/rhum@v1.1.10/mod.ts";
import { assertInstanceOf } from "https://deno.land/std@0.132.0/testing/asserts.ts";
export interface IGame {}
export class NullGame implements IGame {}
function WithGameProperty() {
return <T extends new (...args: any[]) => any>(GameProperty: T) => {
return class extends GameProperty {
private game: IGame = new NullGame();
public set Game(game: IGame) {
this.game = game;
}
public get Game() {
return this.game;
}
};
};
}
const PlayersEngine = WithGameProperty()(
class PlayersEngine {
onNextGenerationReady(listener: () => void): void {
// add listener to react on an event
}
prepareNextGeneration(): void {
// do some stuff and trigger an event
}
},
);
const pe = new PlayersEngine();
pe.Game = new NullGame();
assertInstanceOf(pe.Game, NullGame);
Rhum.mock(NullGame).create();
Rhum.mock(PlayersEngine).create();
作为参考,我是 Rhum 的维护者之一。
问题在于 Rhum 的内部代码,我们获取属性的逻辑不适用于 getter 和 setter。我试过这个并设法得到了一个有效的修复,所以它根本不是你的代码。
例如:
let desc = Object.getOwnPropertyDescriptor(original, property);
if (desc === undefined) {
// property is a getter or setter
desc = Object.getOwnPropertyDescriptor(this.constructor_fn.prototype, property)
}
// We can now use `desc.value`
我将为此添加一个修复程序和一个测试用例,并将在今晚发布一个新的补丁版本,所以请密切关注发布:)