Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模块化Javascript web应用的单元测试_Javascript_Unit Testing_Testing_Backbone.js_Requirejs - Fatal编程技术网

模块化Javascript web应用的单元测试

模块化Javascript web应用的单元测试,javascript,unit-testing,testing,backbone.js,requirejs,Javascript,Unit Testing,Testing,Backbone.js,Requirejs,我正在使用BackboneJS和RequireJS构建一个web应用程序,需要通过AJAX为UI交互和数据检索实现某种形式的单元测试。我遇到过这样的情况,但不知道如何将其集成到我的应用程序中 如果我正在测试以下内容: 用户登录正常吗 是否已从服务器接收到数据 单击按钮是否会触发预期的响应 单击事件对动态加载的html内容有效吗 应用程序是否正确响应哈希/推送状态URL的更改 我认为测试必须直接集成到我的应用程序中,以便访问特定的JS对象、处理特定于会话的数据并响应推送状态URL的更改 如何将

我正在使用BackboneJS和RequireJS构建一个web应用程序,需要通过AJAX为UI交互和数据检索实现某种形式的单元测试。我遇到过这样的情况,但不知道如何将其集成到我的应用程序中

如果我正在测试以下内容:

  • 用户登录正常吗
  • 是否已从服务器接收到数据
  • 单击按钮是否会触发预期的响应
  • 单击事件对动态加载的html内容有效吗
  • 应用程序是否正确响应哈希/推送状态URL的更改
我认为测试必须直接集成到我的应用程序中,以便访问特定的JS对象、处理特定于会话的数据并响应推送状态URL的更改

如何将QUnit或Jasmine(或其他建议)集成到我的模块化应用程序中,以对这些功能进行单元测试?

是一个非常好的单元测试框架,它与浏览器无关,支持测试异步功能,请参阅

然而,从您的测试用例来看,您似乎想要更像集成测试的东西? 如果是的话,这是一个很好的浏览器自动化工具


至关重要的是,这两种工具都不需要您修改代码(除非您发现bug:)

单元测试非常简单

您可以创建一个测试HTML页面。您包括QUnit/NodeUnit/Jasmine/TestLibraryOfChoice

然后使用requireJS并加载一个javascript模块

您只需测试导出的对象或函数。这意味着测试模块的有效输入并断言输出是正确的


您可能需要模拟ajax并编写HTML模拟

如果您想看到使用QUnit对基于requireJS的模块进行单元测试的示例,请在下载javascript参考体系结构


免责声明:我是它的主要作者。

好的,那么我是否必须为我的测试创建一个完整的副本环境,测试不会直接在我的应用程序上运行?因此,我提供了虚拟数据和虚拟html元素来测试UI事件。我的很多逻辑都在BackboneJS对象中,这是一个问题吗?有人对QUnit和RequireJS测试给出了建议。@pagewil这取决于应用程序的“模块化”程度。如果它是真正模块化的,那么创建一个副本环境就很简单了,可以包含html代码片段并模拟一些ajax。记住,每个模块应该有一个单元测试套件。我应该执行将虚拟模型持久化到后端的测试吗?如果是这样,则在测试完成后需要从数据库中删除数据。2.有些测试需要cookie/session数据通过后端的安全检查,应该如何处理?3.是否所有测试模块都应位于“/tests”目录中?@pagewil我将使用实时数据库和实时系统进行测试。我进行的每个单元测试都会在数据库上创建真实数据,并再次删除真实数据。这可能是一种不好的做法,但我就是这样做的。