import { Recorder, Pubsub } from "trident";
const pubsub = new Pubsub();
export class SmartRecorder extends Recorder {
constructor(props) {
super(props);
}
start() {
pubsub.subscribe('androidData', androidDataHandler);
return super.start();
}
}
使用 mockImplementation
方式,提示 类型“typeof Recorder”上不存在属性“mockImplementation”
用 as
转换后无效。
使用 jest.requireActual
,直接没法运行。
试了两天搜了很多方法都不行,请问下大佬们怎么编写啊?
1
theohateonion 2021-01-26 10:19:05 +08:00
建议贴下测试代码先
|
2
Flands OP test
```ts const mockStart = jest.fn(); const mockInit = jest.fn(); const mockPublish = jest.fn(); const mockSubscribe = jest.fn(); // 第一种 import { Pubsub, Recorder } from "trident"; jest.mock("trident", () => { return { Pubsub: () => { return class { publish() { return mockPublish; } subscribe() { return mockSubscribe; } }; } }; }); // 第二种 import * as trident from "@cloud/trident-js-sdk/src"; const mockPubsub = jest.spyOn(trident, "Pubsub"); (mockPubsub as jest.Mock).mockImplementation(() => { return { publish: mockPublish, subscribe: mockSubscribe }; }); const mockRecorder = jest.spyOn(trident, "Recorder"); (mockRecorder as jest.Mock).mockImplementation(() => { const original = jest.requireActual('@cloud/trident-js-sdk/src'); return { ...original, start: mockStart, }; }); ``` 主要还是 `mockImplementation` 和 `requireActual`各种组合起来,虽然看着挺离谱也没法运行,但尝试了很多写法都不行。。 |
3
Flands OP 不要在意 `@cloud/trident-js-sdk/src` 这个,原本打算脱敏的,结果没脱全。实际上都是 `trident`
|