【发布时间】:2020-07-28 15:08:23
【问题描述】:
我必须测试 processMsg。但是,它没有被调用。以下是我尝试过的代码:
用户数据.ts
import { listen } from './rdkafka';
export class UserData {
unsubscribe: any;
config: any;
constructor() {
this.config = {
name: 'msgHandler'
}
};
private processMsg = (value): void => {
console.log('param value', value.toString());
this.unsubscribe();
};
getData = (): void => {
this.unsubscribe = listen({
name: this.config.name,
processMessage: this.processMsg
});
};
}
test.ts
describe('UserData', () => {
let userData: UserData;
beforeEach(() => {
userData = new UserData();
});
it('userData', () => {
expect(userData.getData()).toBeUndefined();
})
})
听.ts
const listen = ({name, processMessage}) => {
const socket = new WebSocket('ws://localhost:8080');
socket.addEventListener('message', async (data) => {
await processMessage(data)
});
}
getData方法测试成功,但需要测试getData里面的listen方法。在这方面的任何帮助都会非常有帮助
【问题讨论】:
-
您能否为问题添加更多上下文?对于监听函数它从何而来?
-
还为监听方法添加了代码。 @MehdiBelbal
-
你不应该在你的
UserData测试中测试listen。您应该只检查是否使用正确的参数调用它。查看此链接以模拟listen: jestjs.io/docs/en/mock-functions#mocking-modules -
那么在这种情况下,私有方法将永远不会测试,因为它是从监听内部调用的。那么,覆盖率将不是 100%。直接测试私有方法也不是一个好习惯,因为它与其他方法在一个流程中,如果我错了,请纠正我。 @known-as-bmf
标签: node.js typescript jestjs