簡體   English   中英

如何殺死幸存的突變 JavaScript

[英]How to Kill Surviving mutation JavaScript

我有這個代碼

const writeToDB = async (data) => {
    console.log("Inside db put")
    try {
        const resp = await dynamoDB.put(data).promise();
        console.log("Data added db: ", resp);
        return "successfully inserted"
    } catch (err){
       throw new Error(`Failed to write in database`, err)
  }
}

我對此功能進行了 2 項測試,其中一項用於檢查其何時成功,一項用於檢查它何時引發錯誤。 當我運行史崔克時,我得到了一個幸存的突變


    - } catch (err){
    -   throw new Error(`Failed to write in database`, err)
    - }
     + } catch (err){}

我相信這是試圖找到一個測試“如果它捕捉到錯誤但沒有拋出錯誤”。 我如何編寫一個測試來殺死這個特定的 Blockstatement 突變。 代碼總是會拋出我指定的錯誤。

突變測試是完全正確的。 該方法

return mm.putMetadataItem(metadata).catch(err => { assert.throws(() => { throw error }, err) })

檢查putMetadataItem function 的預期行為是錯誤的。 特別是,如果返回的 promise 沒有被拒絕,則帶有斷言的.catch()回調根本不會運行,並且會返回已完成的 promise,這會導致單元測試通過。 assert.throws在這里也毫無意義,你肯定知道throw error會拋出,所以這一切都是為了檢查errorerr之間的相等性。

你需要寫

return mm.putMetadataItem(metadata).then(() => {
  throw new AssertionError('expected putMetadataItem() to reject');
}, err => {
  assert.equal(error, new Error('Failed to write in database'));
});

但是您實際上應該使用assert.rejects

return assert.rejects(() => {
  return mm.putMetadataItem(metadata);
}, new Error('Failed to write in database'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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