繁体   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