我不了解单元测试

时间:2013-12-16 20:42:12

标签: javascript unit-testing jasmine karma-runner

所以我试图做一些单元测试而且我完全迷失了。 这是我的功能:

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是否为对象,为什么还要尝试使用所有可能的参数值检查结果?很多事我不明白,请帮帮我!!

2 个答案:

答案 0 :(得分:0)

单元测试应测试小的孤立问题。您应该为您在问题中提到的每件作品编写一个测试。很多时候,您最终会进行多项测试以涵盖相同的功能。

覆盖率是用于衡量代码测试结果的常用指标。我不熟悉Karma,但是大多数测试框架都有一个覆盖命令,可以告诉你测试覆盖了你的代码百分比。

加班,你将开始更好地了解如何有效地编写测试。

答案 1 :(得分:0)

您想测试代码的作用。

用于测试代码正在执行的DOM操作。你有几个选择。

  1. 监视JQuery函数并确保它们被调用。您可以为show()empty()append()等创建间谍。并确保使用正确的参数调用它们。这样做的缺点是你与jQuery绑定,可能会使你的测试变得复杂。
  2. 您可以将元素附加到DOM,并确保对这些元素进行操作。因此,在测试中,您将添加一个beforeEach函数,该函数在调用函数之前以初始状态设置DOM的元素。然后在测试中确保属性被正确修改(即元素现在可见,一个被清空,并添加了正确的子元素)。然后,您可以使用afterEach方法从测试结果页中删除这些元素。
  3. 至于你传递给你的函数的参数,你想要全面。因此,您希望传入会导致更改功能的参数。

    根据您的操作,我会使用第二个选项,因为它与任何特定代码无关。您可以在不破坏测试的情况下重构您的JavaScript,并确保您的代码仍然正常运行。例如,您将传递一个空对象和一个具有多个错误属性的对象,以确保您处理附加信息。