我如何在QUnit"中思考用我自己的JavaScript库?

时间:2014-07-15 17:17:01

标签: javascript unit-testing github local-storage qunit

我如何在Qunit"中思考使用我自己的JavaScript库?

我熟悉javascript开发,但现在我想开始使用Qunit (我的应用程序使用HTML / JavaScript)

我制作自己的图书馆。我使用公共函数私有函数。我还使用异步函数(事件监听器和回调)similar to jQuery

var mylib;

(function() {
        //...
})();

我不知道如何组织它。以下是一些问题,以澄清我寻求的答案:

  • 如何对私人功能进行单元测试?
  • 如何组合数百项测试?
  • 根据您的经验,组织测试的最佳方法是什么? 我应该使用多个HTML文件吗?我应该如何在JavaScript文件之间拆分测试?
  • 是否有建议用于单元测试的QUnit插件?

  • 使用GitHub,我可以在提交时自动使用QUnit吗? 你是如何设置的?也许使用travis-ci

  • 如何对异步函数进行单元测试?具体来说,如果函数与 LocalStorage (HTML5存储)有链接并且可以与其他页面(like this)交互,该怎么办?我怎么测试呢? 我应该使用对象变量而不是LocalStorage吗?

我访问了官方网站http://qunitjs.com/,但我不认为文档是一个很好的起点。

2 个答案:

答案 0 :(得分:3)

Travis-ci确实是一种触发测试的好方法,包括客户端库。

答案" Using Travis-CI for client-side JavaScript libraries?"在kort/kort/tree/develop/test/client中提供此类测试的良好示例,其中包括QUnit in its index.hml file 关键是使用Grunt.js

Travis作业的一个例子:kort/kort/jobs/3266208确实包括运行QUnit。


4年后,在赏金之后更新:

您可以在使用Travis的FredrikNoren/ungit中看到单位测试超时。

但由于你不在GitHub上,你可以使用像GitLab-CI这样的替代品(使用你自己的GitLab CE -- Community Edition -- server if you want

在" GitLab Frontend testing standards and style guidelines"中查看更多该方法:应用于GitLab项目的最佳实践也可以应用于您的项目。
您可以看到他们的unit test policy

答案 1 :(得分:1)

我相信“如何对私有功能进行单元测试?”的最佳答案。是:

您可以通过测试公共功能来测试私有功能。

也就是说,您不会直接测试私有功能。您可以通过完全测试使用它们的公共功能(使用足够的输入来测试专用功能中的边缘情况)来测试它们。

理论与最佳实践对话:该问题与Abstraction有关。公共职能部门通常需要通过私人职能部门执行较高级别的工作,而这需要较低级别的工作。访问公共功能的实体(同一软件中的另一个模块,使用该库的开发人员,调用API的人员等)仅关心高级公共功能的作用。他们不需要(或能够)知道具体的实现是什么。离他们抽象

示例时间:假设我们有一个公共功能,该功能是图形设计库的一部分。此函数采用十六进制颜色值(如“#ff112a”)并将其转换为通用颜色名称,如“红色”。

内部,我们可以使用几个私有函数:

  • 一个用于验证输入并将其修整为数字本身(#ff112a-> ff112a)
  • 将每个十六进制值转换为更易于理解的值(ff-> 100、11-> 6.7、2a-> 16.5)
  • 一个将RGB信息转换为普通颜色(100%红色,7%绿色和16.5%蓝色->“红色”)的

但是,我们也可以在一个公共职能中完成所有这些工作。或者,我们可以在内部使用不同的方法来使用一组不同的私有函数。

重点是私有函数是私有的,因为它们包含应从外部隐藏的细节。我们不会直接测试这些私有功能,以使我们的测试保持在公共功能的抽象级别,并且我们不坚持内部结构以任何特定方式工作。