在 HTML5 应用程序中调试和测试 JavaScript

HTML5 应用程序通常结合了 HTML、CSS 和 JavaScript,用于创建在浏览器中运行并显示在多种设备(包括智能手机、平板电脑和笔记本电脑)上的应用程序。本文档说明了 IDE 如何为您提供工具来帮助您在 IDE 中调试和测试 JavaScript 文件。

在 HTML5 应用程序中调试 JavaScript 文件时,建议安装用于 Chrome 浏览器的 NetBeans Connector 扩展。在浏览器中运行应用程序并且扩展已安装时,调试将自动启用。

通过 IDE 还可以方便地使用 Jasmine 测试框架和 JS 测试驱动程序服务器对 JavaScript 文件进行配置和运行单元测试。可以配置 JS 测试驱动程序对多种浏览器运行单元测试,可以快速指定需要 IDE 在运行测试时加载的 JavaScript 库、脚本和测试。测试失败时,可以使用调试器来帮助您查找有问题的代码。

有关如何为 Chrome 浏览器安装 NetBeans Connector 扩展的详细信息,请参阅教程 HTML5 应用程序入门

有关 IDE 中的 JavaScript 编辑功能的更多信息,请参见《使用 NetBeans IDE 开发应用程序用户指南》中的创建 JavaScript 文件

要观看此教程的截屏视频,请参阅在 HTML5 应用程序中测试和调试 JavaScript 的视频

目录

此页上的内容适用于 NetBeans IDE 7.3 和 7.4

要完成本教程,需要使用以下资源。

软件或资源 要求的版本
NetBeans IDE,Java 7.3, 7.4
Java 开发工具包 (JDK) 6 或 7
Chrome 浏览器 --
用于 Chrome 的 NetBeans Connector 扩展 1.x
JS 测试驱动程序 JAR --

注:

  • 本文档使用 JS 测试驱动程序服务器来运行 JavaScript 单元测试。您可能需要通过 JS 测试驱动程序项目主页来熟悉服务器的属性。
  • 本文档假定您具备 HTML、CSS 和 JavaScript 的一些基本知识或编程经验。

创建 HTML5 示例应用程序

执行以下步骤可以从站点模板创建 HTML5 示例应用程序。

  1. 从主菜单中选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键;在 Mac 上为 ⌘-Shift-N 组合键),以打开新建项目向导。
  2. 在新建项目向导中展开 Samples(示例)节点,然后选择 HTML5 类别。
  3. 选择 AngularJS Phone Catalog Tutorial(AngularJS 电话目录教程)项目。单击 "Next"(下一步)。
    新建文件向导中示例项目的屏幕快照
  4. 指定项目的位置。单击 "Finish"(完成)。

    单击 "Finish"(完成)时,IDE 将创建项目并在编辑器中打开 index.html 文件。在 "Projects"(项目)窗口中,可以看到项目包含 index.html 和各种 CSS 样式表、JavaScript 文件和库。

    "Projects"(项目)窗口项目节点的屏幕快照

    该项目还包含多个默认生成的 JavaScript 单元测试和配置文件。

  5. 确认在工具栏的下拉列表中选择了 "Chrome with NetBeans Connector"(包含 NetBeans Connector 的 Chrome)。
    工具栏中下拉列表的屏幕快照
  6. 在工具栏中单击 "Run"(运行)按钮 (F6) 或者在 "Projects"(项目)窗口中右键单击项目节点并选择 "Run"(运行)。

运行项目时,HTML5 应用程序的首页在 Chrome 浏览器中打开,您可以查看手机列表。单击某个手机的名称时,页中将显示该手机的详细信息。

浏览器窗口中应用程序的屏幕快照

您可以看到,浏览器标签中有一个黄色的栏,通知您 NetBeans Connector 正在调试标签。在黄色栏可见时,IDE 和浏览器已连接,能够彼此通信。从 IDE 启动 HTML5 应用程序时,JavaScript 调试器将自动启用。将对文件所做的更改保存到 CSS 样式表时,您无需重新加载页,因为浏览器窗口将自动更新以显示更改。

如果选择关闭黄色栏或者单击 "Cancel"(取消),您将断开 IDE 与浏览器之间的连接。如果断开了连接,则将需要重新从 IDE 运行 HTML5 应用程序才能使用 JavaScript 调试器。

您还可以看到,NetBeans 图标在浏览器的 URL 位置字段中可见。您可以单击图标以打开提供了各种选项的菜单,用于更改浏览器的显示大小和启用在 NetBeans 中检查模式。

使用 JavaScript 调试器

在本练习中,您将在 JavaScript 文件中放置一个断点并运行应用程序。您可以使用编辑器中的工具提示来快速查看变量的值。

  1. 在“项目”窗口中展开 js 节点,然后双击 controllers.js 以在编辑器中打开该文件。
  2. 通过在 controllers.js 的第 16 行左边缘中单击来放置行断点。
    编辑器中设置的断点的屏幕快照

    可以通过选择 "Window"(窗口)> "Debugging"(调试)> "Breakpoints"(断点)来打开 "Breakpoints"(断点)窗口,在其中查看断点。

    "Breakpoints"(断点)窗口中断点的屏幕快照
  3. 在工具栏中单击“运行”按钮可以再次运行项目。

    运行项目时,您可以看到相同的页,因为没有命中您设置的断点。

  4. 在浏览器中,单击页面中的一个条目,例如 Motorola Atrix4G。

    您可以看到,该页部分加载,但缺少电话的数据,因为数据未传递到 JavaScript 并呈现。

    浏览器中 "Details"(详细信息)页的屏幕快照
  5. 在 IDE 的编辑器中,您可以看到命中了断点,并且程序计数器当前位于 controllers.js 的第 16 行。
  6. 将光标悬停在 phone 变量上可查看有关变量信息的工具提示。
    编辑器中变量工具提示的屏幕快照

    在工具提示中,可以看到以下信息:phone = (Resource) Resource

  7. 单击工具提示可展开工具提示并查看变量和值的列表。
    编辑器中展开的变量工具提示的屏幕快照

    例如,展开 android 节点时,您可以看到字符串 osui 的值。

    还可以选择 "Window"(窗口)> "Debugging"(调试)> "Variables"(变量),在 "Variables"(变量)窗口中查看列表。

  8. 使用工具栏中的步进按钮,可以逐步完成 angular.js 库中的 JavaScript 函数,或者单击 "Continue"(继续)按钮 (F5) 以继续应用程序。

运行 JS 单元测试

使用 IDE 可以方便地配置 JS 测试驱动程序服务器来运行单元测试。在本教程中,您将使用包含示例项目的 JavaScript 单元测试并使用 Jasmine 测试框架。

JS 测试驱动程序是一个服务器,为运行 JavaScript 单元测试提供作为目标的 URL。运行测试时,服务器将启动并等待运行测试。在浏览器窗口中,您可以看到绿色的状态消息,确认服务器正在运行并在等待。IDE 为 JS 测试驱动程序提供了确认对话框,可以从 "Services"(服务)的 "JS Test Driver"(JS 测试驱动程序)节点打开。使用确认对话框可以方便地指定 JS 测试驱动程序服务器 JAR 的位置以及要运行测试的浏览器。使用 JS 测试驱动程序节点可以快速查看服务器是否在运行以及启动和停止服务器。

有关配置 JS 测试驱动程序服务器的详细信息,请参阅 JsTestDriver 入门文档。

  1. 下载 JS 测试驱动程序 JAR 并将 JAR 保存到本地系统。
  2. 在 "Services"(服务)窗口中,右键单击 "JS Test Driver"(JS 测试驱动程序)节点并选择 "Configure"(配置)。
    "Services"(服务)窗口中 "Configure jsTest Driver"(配置 jsTest 驱动程序)节点的屏幕快照
  3. 在 "Configure"(配置)对话框中,单击 "Browse"(浏览)并找到所下载的 JS 测试驱动程序 JAR。
  4. 为浏览器选择 "Chrome with NetBeans Connector"(包含 NetBeans Connector 的 Chrome)(在 NetBeans IDE 7.3 中,选择 "Chrome with NetBeans JS Debugger"(包含 NetBeans JS 调试器的 Chrome))。单击 "OK"(确定)。
    "Configure jsTest Driver"(配置 jsTest 驱动程序)对话框的屏幕快照

    注:只需要在首次配置 JS 测试驱动程序时指定 JS 测试驱动程序 JAR 的位置。

    可以捕获并用于测试的浏览器列表基于系统上已经安装的浏览器。可以选择多个浏览器作为从属浏览器,但要运行测试,必须为每个浏览器打开一个窗口,该窗口可以是服务器的从属窗口。从 IDE 启动服务器时,将自动捕获所选浏览器。

  5. 在项目窗口中,右键单击项目节点,然后选择 "New"(新建)> "Other"(其他)。
  6. 在 "Unit Tests"(单元测试)类别中,选择 jsTestDriver Configuration File(jsTestDriver 配置文件)。单击 "Next"(下一步)。
  7. 确认文件名为 jsTestDriver
  8. 在 "Created File"(创建的文件)字段中,确认文件的位置是项目的 config 文件夹 (AngularJSPhoneCat/config/jsTestDriver.conf)。

    注:jsTestDriver.conf 配置文件必须位于项目的 config 文件夹中。如果所创建文件的位置不在 config 文件夹中,请单击 "Browse"(浏览)并在对话框中选择 AngularJSPhoneCat - Configuration Files(AngularJSPhoneCat - 配置文件)文件夹。

  9. 确认已经选中了下载 Jasmine 库的复选框。单击 "Finish"(完成)。
    “新建 jsTestDriver 配置文件”向导的屏幕快照

    注:需要下载 Jasmine 库以运行 jsTestDriver。如果系统通知您 IDE 无法下载 Jasmine 库,请在 "Options"(选项)窗口中检查 IDE 的代理设置。

    单击 "Finish"(完成)时,IDE 将生成框架 jsTestDriver.conf 配置文件并在编辑器中打开文件。在 "Projects"(项目)窗口中,可以看到配置文件创建在 "Configuration Files"(配置文件)节点下。如果在 "Unit Tests"(单元测试)节点下展开 lib 文件夹,则可以看到 Jasmine 库已添加到项目中。

    "Projects"(项目)窗口中的 "Unit Tests"(单元测试)文件夹的屏幕快照

    在编辑器中,可以看到默认情况下生成了以下配置文件内容:

    server: http://localhost:42442
    
    load:
      - test/lib/jasmine/jasmine.js
      - test/lib/jasmine-jstd-adapter/JasmineAdapter.js
      - test/unit/*.js
    
    exclude:
    

    配置文件指定运行测试所用的本地服务器的默认位置。该文件还列出了必须加载的文件。默认情况下,列表包括 Jasmine 库和任何位于 unit 文件夹中的 JavaScript 文件。测试通常位于 unit 文件夹中,但您可以修改列表以指定运行测试所需加载的其他文件的位置。

    AngularJS 电话目录教程项目的 unit 文件夹包含四个带有单元测试的 JavaScript 文件。

    "Files"(文件)窗口中 "Unit Tests"(单元测试)文件夹的屏幕快照

    要运行单元测试,需要将您要测试的 JavaScript 文件的位置以及 Angular JavaScript 库添加到要加载的文件列表中。

  10. 将以下位置(粗体)添加到配置文件的 load 部分。保存所做的更改。
    load:
      - test/lib/jasmine/jasmine.js
      - test/lib/jasmine-jstd-adapter/JasmineAdapter.js
      - test/unit/*.js
      - app/lib/angular/angular.js
      - app/lib/angular/angular-*.js
      - app/js/*.js  
      - test/lib/angular/angular-mocks.js
  11. 禁用在项目中设置的任意断点。

    您可以在 "Breakpoints"(断点)窗口中取消选中断点的复选框以禁用断点。

  12. 在 "Projects"(项目)窗口中右键单击项目节点,然后选择 "Test"(测试)。

    单击 "Test"(测试)时,IDE 自动在 Chrome 浏览器中打开 JS 测试运行器,并在 "Output"(输出)窗口中打开两个标签。

    jsTestDriver 在浏览器窗口中运行的屏幕快照

    jsTestDriver 服务器运行时,Chrome 浏览器窗口将显示一条消息。可以看到服务器运行在 localhost:42442。在 "Output"(输出)窗口的 "js-test-driver Server"(js-test-driver 服务器)标签中,您可以查看服务器的状态。

    "Output"(输出)窗口的 "js-test-driver Server"(js-test-driver 服务器)标签的屏幕快照

    注:要运行单元测试,必须打开浏览器窗口并且 jsTestDriver 服务器必须正在运行。在 "Services"(服务)窗口中右键单击 "JS Test Driver"(JS 测试驱动器)节点,然后选择 "Start"(启动)可启动服务器并打开窗口。

    在 "Output"(输出)窗口的 "Running JS unit tests"(运行的 JS 单元测试)标签中,可以看到四个运行的测试的输出。测试位于 controllerSpec.jsfiltersSpec.js 文件中。(unit 文件夹中的 servicesSpec.jsdirectivesSpec.js 文件没有任何测试。)

    "Output"(输出)窗口中 "Running JS unit tests"(运行的 JS 单元测试)标签的屏幕快照
  13. 在主菜单中选择 "Window"(窗口)> "Output"(输出)> "Test Results"(测试结果)以打开 "Test Results"(测试结果)窗口。

    在窗口中,可以看到说明所有测试已通过的消息。

    "Test Results"(测试结果)窗口的屏幕快照

    可以在窗口的左边缘中单击绿色选中图标以查看已通过测试的展开列表。

调试 JS 单元测试

此练习演示如何在单元测试失败时使用 IDE 来调试 JavaScript 文件。

  1. 在“项目”窗口中展开 js 文件夹,然后双击 controllers.js 以在编辑器中打开该文件。
  2. 修改文件中的第 7 行,进行如下更改(以粗体显示)。保存所做的更改。
    function PhoneListCtrl($scope, Phone) {
      $scope.phones = Phone.query();
      $scope.orderProp = 'name';
    }

    保存更改时,浏览器中将自动重新加载页面。可以看到,列表中电话的顺序发生了更改。

  3. 确认 JS 测试驱动程序服务器正在运行,并且在 Chrome 浏览器窗口中可以看到状态消息。
  4. 在 "Projects"(项目)窗口中右键单击项目节点,然后选择 "Test"(测试)。
    "Test Results"(测试结果)窗口中的失败测试的屏幕快照

    运行测试时,您可以看到有一个测试失败,消息显示出现值 "name" 而非所需的值 "age"。

  5. 在 "Output"(输出)窗口中打开 "Running JS unit tests"(运行的 JS 单元测试)标签。
    "Output"(输出)窗口 "Running JS unit tests"(运行的 JS 单元测试)标签中失败测试的屏幕快照

    在消息中,您可以看到第 41 行的 orderProp 应为 age

  6. 单击 "Running JS unit tests"(运行的 JS 单元测试)标签可导航到失败测试中的行。测试文件 controllersSpec.js 在编辑器中打开,位于第 41 行(粗体
    it('should set the default value of orderProp model', function() {
          expect(scope.orderProp).toBe('age');
        });

    可以看到,测试需要 "age" 作为 scopeOrder.prop 的值。

  7. 在测试失败的行设置断点 (第 41 行)。
  8. 在 "Projects"(项目)窗口中右键单击项目节点,然后选择 "Test"(测试)。

    再次运行测试时,程序计数器命中了断点。如果将光标悬停在 scopeOrder.prop 上,则可以看到,命中断点时,工具提示中变量的值为 "name"。

    IDE 显示编辑器、"Evaluate Code"(计算代码的值)窗口和 "Variables"(变量)窗口的屏幕快照

    此外,您还可以在主菜单中选择 "Debug"(调试)> "Evaluate Expression"(计算表达式的值)以打开 "Evaluate Code"(计算代码的值)窗口。如果在窗口中键入表达式 scopeOrder.prop 并单击 "Evaluate Code Fragment"(计算代码片段的值)按钮 ("Evaluate Expression"(计算表达式的值)按钮) (Ctrl-Enter),则调试器在 "Variables"(变量)窗口中显示表达式的值。

  9. 在工具栏中单击 "Continue"(继续)以完成运行测试。

小结

在本教程中,您学习了如何利用 IDE 提供的工具来帮助您调试和运行 JavaScript 文件的单元测试。在 Chrome 浏览器中运行应用程序并且启用了 NetBeans Connector 扩展时,将自动为 HTML5 应用程序启动调试。通过 IDE 还可以方便地使用 Jasmine 测试框架和 JS 测试驱动程序服务器对 JavaScript 文件进行配置和运行单元测试。



另请参见

有关 netbeans.org 中 HTML5 应用程序支持的详细信息,请参见以下资源:

有关使用 JS 测试驱动程序运行单元测试的详细信息,请参阅以下文档:

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo