如何杀死幸存的突变 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 项测试,一项用于检查其何时成功,另一项用于抛出错误。
当我 运行 stryker 我得到一个幸存的突变
- } 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
函数的预期行为是错误的。特别是,如果返回的 promise 没有被拒绝,带有断言的 .catch()
回调根本不会 运行,并且返回已实现的 promise,这会导致单元测试通过。另外 assert.throws
在这里毫无意义,你肯定知道 throw error
会抛出,所以这一切只是检查 error
和 err
.
之间的相等性
你需要写
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'));
我有这个代码
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 项测试,一项用于检查其何时成功,另一项用于抛出错误。 当我 运行 stryker 我得到一个幸存的突变
- } 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
函数的预期行为是错误的。特别是,如果返回的 promise 没有被拒绝,带有断言的 .catch()
回调根本不会 运行,并且返回已实现的 promise,这会导致单元测试通过。另外 assert.throws
在这里毫无意义,你肯定知道 throw error
会抛出,所以这一切只是检查 error
和 err
.
你需要写
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'));