JavaScript单元测试。嘲笑什么?

JavaScript单元测试。嘲笑什么?,javascript,unit-testing,qunit,Javascript,Unit Testing,Qunit,我正试图在我的开发过程中引入单元测试,但我不知道该怎么做 我有一个包含很多模块的大型应用程序(分离的js文件)。例如: videoInfo.js availableVideos.js availableChannels.js networkSettings.js 还有几个模块为其余部分提供服务: eventHandler.js i18n.js ajax.js configuration.js auth.js baseModule.js 问题是:如何测试像videoInfo.js这样使

我正试图在我的开发过程中引入单元测试,但我不知道该怎么做

我有一个包含很多模块的大型应用程序(分离的js文件)。例如:

  • videoInfo.js
  • availableVideos.js
  • availableChannels.js
  • networkSettings.js
还有几个模块为其余部分提供服务:

  • eventHandler.js
  • i18n.js
  • ajax.js
  • configuration.js
  • auth.js
  • baseModule.js
问题是:如何测试像videoInfo.js这样使用所有服务模块的模块?我认为有两种方法:

  • 我只加载videoInfo.js并模拟所有内部接口。问题是,如果任何内部接口发生更改,我都不会捕获错误
  • 我加载所有模块(整个应用程序)并使用真实的应用程序环境测试videoInfo(将模拟的外部AJAX调用除外)

当您有很多内部依赖项时,什么是实现这一点的好方法?

理想情况下,您希望在测试套件中同时使用这两种方法

您希望模拟所有依赖项(在您的videoInfo.js示例中),以便可以将其代码与其他代码隔离开来,并确保其正常工作。根据您所拥有的代码的设计,这可能很困难。因为编写代码时可能没有考虑到测试,所以不会进行模拟

您还需要进行一系列完整的应用程序级测试,以确保部件之间的所有交互都能正常工作。根据应用程序的不同,这些测试可能非常脆弱,因为它们依赖于您无法控制的数据

这些测试可能在单独的套件中,因此它们可以彼此独立运行

如果您刚刚开始编写代码测试,请尽可能编写最好的测试。测试是代码,应该在进行过程中进行重构。尽可能编写最简单的测试。为遗留代码编写测试是极其困难的。目前的设计可能难以正确测试。所以,当你做出改变时,尽你所能