首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

精通 MEAN 测试 MEAN 堆栈(6)

精通 MEAN 测试 MEAN 堆栈(6)

使用 Karma 和 istanbul 显示代码覆盖范围只有在显示了测试代码覆盖范围后,测试基础架构才算完整。前面的报告仅显示了通过和失败的测试 —                它们没有显示您忘记编写的测试。优秀的代码覆盖工具会逐行地显示单元测试访问了您代码库的哪些部分,更重要的是,指出单元测试还未访问哪些代码行。
如果键入 npm install karma-coverage --save-dev 来安装                karma-coverage 插件(它使用了   库),并根据                  来配置它,您会获得一组漂亮的报告,它们显示了应用程序中的每行代码,如图 2 所示。
图 2. 覆盖范围报告
绿色的行已由单元测试访问,红色的行是等待未来的单元测试的行。
模拟依赖关系精心编写的单元测试的一个特征是它们的依赖关系。它们绝不应依赖于实际的数据库或向实际的 Web 服务发出实际的 HTTP                调用。幸运的是,模拟这些依赖关系是一种历史悠久的测试运行方式。
无需在客户端 Jasmine 测试中执行实际的 Ajax 调用,可以考虑使用 AngularJS 中包含的   模拟服务。
无需依赖于实际的 MongoDB 数据库来执行测试,可以考虑使用  — Mongoose(和 MongoDB)的一个单纯的内存型临时替代方案,专为测试用途而编写。
使用 Protractor.js 运行端到端测试截至目前,您一直在运行单元测试。单元测试 (根据定义)是一些不依赖于 GUI 的测试。单元测试用于您代码库的非 UI 部分。
但是,如何测试典型用户在使用您的应用程序时将执行的所有键入和按钮单击操作?要测试这种行为类型,您可以安装 Protractor.js。
  包含丰富的说明和示例。这是简短版本:键入 npm install protractor --save-dev                来安装该库。接下来,编写 Jasmine 测试来访问特定的 URL 和与该页上的特定组件交互。清单 4 显示了来自该项目的主页的一个                Protractor 测试示例。
清单 4. 一个 Protractor                测试
1
2
3
4
5
6
7
8
9
10
11
12
describe('angularjs homepage todo list', function() {
  it('should add a todo', function() {
    browser.get('http://www.angularjs.org');

    element(by.model('todoText')).sendKeys('write a protractor test');
    element(by.css('[value="add"]')).click();

    var todoList = element.all(by.repeater('todo in todos'));
    expect(todoList.count()).toEqual(3);
    expect(todoList.get(2).getText()).toEqual('write a protractor test');
  });
});




您可能已经猜测到,此测试访问 AngularJS 主页,查找 todoText                元素,键入一个测试字符串,然后单击添加按钮。然后它运行一系列断言来确保出现预期的值。
返回列表