Javascript 我不知道';我不理解单元测试

Javascript 我不知道';我不理解单元测试,javascript,unit-testing,jasmine,karma-runner,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 validationError

所以我尝试做一些单元测试,我完全迷路了。 这是我的职责:

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');
};
showNotification=函数(NotificationBoxeElement、validationErrorObject){
notificationBoxElement.show();
NotificationBoxeElement.find('div div:ul类型的最后一个').empty();
for(validationErrorObject中的var inputLabel){
if(validationErrorObject.hasOwnProperty(inputLabel)){
notificationBoxElement.find('div div:ul类型的最后一个')。追加('
  • '+inputLabel+':'+validationErrorObject[inputLabel]+'
  • '); } } NotificationBoxeElement.addClass('alert-danger'); };
    我在用茉莉花和Karma测试跑步者。我的问题是我到底应该测试什么?理想情况下,我希望我的测试是最健壮的,所以我想测试DOM?争论?如果我测试DOM,我应该测试什么?我是否测试ul中是否插入了li,有多少个,以及它们是否包含正确的文本?我是否测试元素现在是否由于show函数而可见


    如果我在测试参数,我应该测试所有可能的值吗?或者我应该测试NotificationBoxeElement是一个dom元素,validationErrorObject是一个对象吗?如果我只能测试validationErrorObject是否为对象,为什么还要尝试使用所有可能的参数值检查结果?很多事情我都不明白,请帮我解决

    单元测试应该测试小的孤立问题。你应该为你在问题中提到的每一个部分写一个测试。很多时候,您最终会进行多个测试来覆盖相同的功能

    覆盖率是一个常用的度量标准,用于衡量代码的测试效果。我不熟悉Karma,但大多数测试框架都有一个覆盖率命令,它会告诉您测试覆盖了多少代码


    随着时间的推移,您将开始更好地了解如何高效地编写测试。

    您希望测试代码的功能

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

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


    基于您正在做的事情,我将使用第二个选项,因为它不与任何特定代码绑定。您可以重构javascript,而无需中断测试并确保代码仍能正常运行。例如,您将传递一个空对象和一个具有多个错误属性的对象,以确保处理附加信息。

    此问题似乎与主题无关,因为它是关于achitecture的,属于Thank you!DOM操作测试部分很清楚,但我仍然不清楚应该如何测试参数。您可以控制参数,不需要“测试”它们。传递它们,以便将DOM元素和对象传递到函数中,并确保事情正确发生。测试时,将函数/类方法视为黑盒。对于给定的一组输入,您需要检查以确保提供了给定的输出。