【问题标题】:What should I write unit tests for in Jasmine?我应该在 Jasmine 中为什么编写单元测试?
【发布时间】:2013-08-07 05:29:35
【问题描述】:

我在系统生命周期中反向工作。几个月前,我编写了一个大型 javascript 库。然后我必须让它变得客观,现在,我必须为它编写单元测试。我正在使用 Maven 并在我的 pom.xml 中有jasmine-maven-plugin。我遇到的问题是我应该为什么编写测试,以及测试的数量。

第一个例子很简单。该函数接受一个字符串并返回它的首字母大写。

var toolsFn = {
    capitaliseFirstLetter: function(string) {
        return string.charAt(0).toUpperCase() + string.slice(1);
    }
},

所以我的单元测试它:

describe("toolsFn - capitaliseFirstLetter", function() {
    it("capitalises the first letter of a given string", function() {
        expect(toolsFn.capitaliseFirstLetter("hello World!")).toBe("Hello World!");
    });
});

但是,我不确定我应该为我的许多其他方法做什么。它们中的大多数处理 html 代码,例如更改选项卡、显示通知、禁用/启用控件。我应该只期待toHaveBeenCalled 的方法还是还有更多?

请检查以下更改选项卡、加载给定选项卡和隐藏通知的示例;

tabsFn = {
    changeTab: function() {
        $(tabButtons).addClass('inactive');
        $(tabContent).hide();
        $(this).removeClass('inactive');
        var tab = $(this).attr('tab');
        $('.tab-content-' + tab).show();
        return false;
    },
    loadTab: function(tab) {
        $(tabButtons).addClass('inactive');
        $(tabContent).hide();
        $('[tab~="' + tab + '"]').removeClass('inactive').removeAttr('disabled');
        $('.tab-content-' + tab).show();
    },

messageFn = {
    hideNotification: function(time) {
        $(messageFn.notificationBar).stop(true, true).fadeOut(time);
    },

非常感谢任何澄清。

【问题讨论】:

    标签: javascript maven jasmine jasmine-maven-plugin


    【解决方案1】:

    其中大部分处理 html 代码,例如更改选项卡、显示通知、禁用/启用控件。

    您要验证的是结果行为是否正确(例如:内容已更改)。这通常通过集成测试来完成,而 Jasmine 并不是集成测试的最佳工具。 Selenium 等工具会更好地完成此类测试。

    只是不要陷入开始测试是否调用特定函数以验证该功能是否仍然正常工作的陷阱。该功能的内部可以更改并调用其他功能,这并不意味着它现在已损坏。所以这就是为什么最好在更高的层次上做(集成测试)。

    我遇到的问题是我应该为什么编写测试,以及要编写多少个测试

    通常,您为每个函数编写单元测试,这些函数并不意味着更改应用程序的状态。您的大写函数是经过单元测试的函数的一个很好的例子。

    至于有多少,这取决于您现在编写单元测试的时间以及将来需要维护它们的时间。您还必须记住每个测试的有用性。如果您正在测试的内容太琐碎,那么为此进行单元测试可能没有任何价值。如果你有足够的时间,一个测试函数的好方法是为每个边缘情况都有一个测试用例(在你的第一个字母大写示例中,一个很好的例子是空字符串,null 或 undefined)和对一般情况的测试。这将导致每个函数进行大约 2-4 次测试。这样,您通常可以很好地覆盖您的代码。

    【讨论】:

    • 很好的回答谢谢你,我真的很感谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2020-09-10
    • 2014-05-21
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多