const updateSession = async (emitter, dbModel, center_id, session_id, data) => {
if (await dbModel.update('session', {center_id, session_id, data})) {
const result = {
center_id: `k${center_id}`,
session_id: session_id,
...data
} ;
emitter.emit('updateSession', {
operationType: 'update',
operationOn: 'session',
data: result
}) ;
} else throw new Error('500 Internal Server Error') ;
}
<块引用>
emitter
是一个 EventEmitter
dbModel
是一个与数据库交互的模块
center_id
是一个数字
session_id
是一个字符串
以上在所有情况下都是相同的
我需要在 3 种不同的情况下开玩笑地测试这个功能
<块引用>情况 1:data = {available_capacity1: 4, available_capacity2: 6}
情况 2:data = {available_capacity1: 4}
情况 3:data = {available_capacity2: 6}
条件:
<块引用>在 case 1 中,如果 data
传递给事件回调,则测试应该通过
侦听器,即:emitter.on('updateSession', callback)
,同时具有
available_capacity1
和 available_capacity2
属性在 data.result
对象
在第 2 种情况下,如果 data
传递给事件回调,则测试应该通过
侦听器在 available_capacity1
对象中只有 data.result
属性
在第 3 种情况下,如果 data
传递给事件回调,则测试应该通过
侦听器在 available_capacity2
对象中只有 data.result
属性
我想知道如何在jest中为上述案例编写测试
非常感谢任何帮助,提前致谢。
答案 0 :(得分:2)
要在玩笑中测试回调函数,您应该使用其测试函数的替代形式,在这种形式中,您使用确定测试结束时调用的回调参数。更多信息请访问:https://jestjs.io/docs/asynchronous#callbacks
这是一个关于如何实现特定测试用例的示例,这些当然并不完美,但应该能让您了解如何自己做。
test('callback data has available_capacity1 and available_capacity2', done => {
const data = { available_capacity1: 4, available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(arg.data).toHaveProperty('available_capacity1');
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity1', done => {
const data = { available_capacity1: 4 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity1');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});
test('callback data has only available_capacity2', done => {
const data = { available_capacity2: 6 };
const emitter = new EventEmitter();
emitter.once('updateSession', arg => {
try {
expect(Object.keys(arg.data).length).toBe(1);
expect(arg.data).toHaveProperty('available_capacity2');
done();
} catch (error) {
done(error);
}
});
updateSession(emitter, dbModel, center_id, session_id, data);
});