模块化Javascript web应用的单元测试
我正在使用BackboneJS和RequireJS构建一个web应用程序,需要通过AJAX为UI交互和数据检索实现某种形式的单元测试。我遇到过这样的情况,但不知道如何将其集成到我的应用程序中 如果我正在测试以下内容:模块化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的更改 如何将
- 用户登录正常吗
- 是否已从服务器接收到数据
- 单击按钮是否会触发预期的响应
- 单击事件对动态加载的html内容有效吗
- 应用程序是否正确响应哈希/推送状态URL的更改
至关重要的是,这两种工具都不需要您修改代码(除非您发现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我将使用实时数据库和实时系统进行测试。我进行的每个单元测试都会在数据库上创建真实数据,并再次删除真实数据。这可能是一种不好的做法,但我就是这样做的。