所以我试图做一些单元测试而且我完全迷失了。 这是我的功能:
showNotification = function(notificationBoxElement, validationErrorObject) {
notificationBoxElement.show();
notificationBoxElement.find('div div:last-of-type ul').empty();
for(var inputLabel in validationErrorObject) {
if(validationErrorObject.hasOwnProperty(inputLabel)) {
notificationBoxElement.find('div div:last-of-type ul').append('<li><strong>' + inputLabel + ': </strong>' + validationErrorObject[inputLabel] + '<span></span></li>');
}
}
notificationBoxElement.addClass('alert-danger');
};
我正在使用Jasmine和Karma测试跑步者。我的问题是我应该测试什么?理想情况下,我希望我的测试是最强大的,所以我想测试DOM?争论?如果我测试DOM,我该测试什么?我是否测试是否在ul中插入了li以及它们中有多少以及是否有正确的文本?我是否因为show函数测试元素现在可见?
如果我正在测试参数,我应该测试所有可能的值吗?或者我应该只测试notificationBoxElement是一个dom元素,而validationErrorObject是一个对象吗?如果我只能测试validationErrorObject是否为对象,为什么还要尝试使用所有可能的参数值检查结果?很多事我不明白,请帮帮我!!
答案 0 :(得分:0)
单元测试应测试小的孤立问题。您应该为您在问题中提到的每件作品编写一个测试。很多时候,您最终会进行多项测试以涵盖相同的功能。
覆盖率是用于衡量代码测试结果的常用指标。我不熟悉Karma,但是大多数测试框架都有一个覆盖命令,可以告诉你测试覆盖了你的代码百分比。
加班,你将开始更好地了解如何有效地编写测试。
答案 1 :(得分:0)
您想测试代码的作用。
用于测试代码正在执行的DOM操作。你有几个选择。
show()
,empty()
,append()
等创建间谍。并确保使用正确的参数调用它们。这样做的缺点是你与jQuery绑定,可能会使你的测试变得复杂。beforeEach
函数,该函数在调用函数之前以初始状态设置DOM的元素。然后在测试中确保属性被正确修改(即元素现在可见,一个被清空,并添加了正确的子元素)。然后,您可以使用afterEach
方法从测试结果页中删除这些元素。至于你传递给你的函数的参数,你想要全面。因此,您希望传入会导致更改功能的参数。
根据您的操作,我会使用第二个选项,因为它与任何特定代码无关。您可以在不破坏测试的情况下重构您的JavaScript,并确保您的代码仍然正常运行。例如,您将传递一个空对象和一个具有多个错误属性的对象,以确保您处理附加信息。