簡體   English   中英

如何開玩笑地測試 function?

[英]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_capacity1available_capacity2屬性,則測試應該通過

在情況 2 中,如果傳遞給事件偵聽器回調的datadata.result object 中只有available_capacity1屬性,則測試應該通過

在情況 3 中,如果傳遞給事件偵聽器回調的datadata.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM