[英]How to test a function in jest?
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
是一個事件發射器
dbModel
是一個與數據庫交互的模塊
center_id
是一個數字
session_id
是一個字符串以上所有情況在所有情況下都是相同的
我需要用 3 種不同的情況來測試這個功能
案例1:
data = {available_capacity1: 4, available_capacity2: 6}
案例 2:
data = {available_capacity1: 4}
案例 3:
data = {available_capacity2: 6}
條件:
在情況 1 中,如果
data
傳遞給事件偵聽器的回調,即:emitter.on('updateSession', callback)
,在data.result
object 中同時具有available_capacity1
和available_capacity2
屬性,則測試應該通過在情況 2 中,如果傳遞給事件偵聽器回調的
data
在data.result
object 中只有available_capacity1
屬性,則測試應該通過在情況 3 中,如果傳遞給事件偵聽器回調的
data
在data.result
object 中只有available_capacity2
屬性,則測試應該通過
我想知道如何開玩笑地為上述案例編寫測試
非常感謝任何幫助,在此先感謝。
要開玩笑地測試回調 function,您應該使用其測試 function 的替代形式,您可以在確定測試已結束時使用您調用的回調參數。 更多信息在這里: 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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.