我正在尝试模拟Discord.JS模块。该模块具有一个Client类,我将在“ Bot”类中进行扩展。我想模拟该模块,以便可以模拟其他类的一些方法,例如“消息”和“通道”,但是我不知道如何模拟一个特定的类 NPM模块。试图在开玩笑的文档和Google上找到一些东西,但是Google的结果只是链接到文档。我不断收到此问题class extends value of undefined is not a constructor or null
。这就是我的测试文件
jest.mock('discord.js', () => ({
}));
我知道我需要手动模拟其他类(Client,Message,Channel等是discord.js模块的类),但是我不确定如何正确地做到这一点
消息对象具有一个称为channel的属性,该属性是一个通道对象,而该通道对象具有.send()方法,所以我尝试了
jest.mock('discord.js', () => ({
Client: jest.fn(),
Message: jest.fn().mockImplementation(() => ({
channel: jest.fn().mockImplementation(() => ({
send: jest.fn((x) => 'Hello World'),
})),
})),
}));
但它一直说msg.channel.send不是方法
describe('should test all commands', () => {
let info: BaseCommand;
let bot: Bot;
let msg: Message;
beforeAll(() => {
info = new InfoCommand();
bot = new Bot({});
msg = new Message(bot, null, null);
jest.spyOn(bot, 'addCommand');
});
test('should check if command arguments are invoked correctly', () => {
msg.channel.send('x');
});
});
答案 0 :(得分:4)
这是因为您将Message定义为函数而不是对象:
jest.mock('discord.js', () => ({
Client: jest.fn(),
Message: {
channel: {
send: jest.fn()
}
}
}));
如果您需要模拟Message对象的整个行为,则可以创建一个模拟类并以此方式模拟其行为