如何在 intern.js 中测试视图库?

How do I test a view library in intern.js?

我正在构建一个使用 backbone 作为基础的库。我的图书馆有一个视图 class,它是 Backbone.View 的扩展。它有一个 HTML 元素作为它的 属性。我在视图上有一堆新功能,我想用实习生测试它们。

问题是我找不到从 intern 本身引用 DOM 的方法。我能看到这个工作的唯一方法是打开一个单独的 HTML 页面的远程 URL,然后用 leadfoot 查询这个 DOM。这种方法对于您转到特定页面以测试您的网站的网站来说似乎很棒,但我正在尝试构建一个库,因此似乎没有必要单独的页面来测试库的核心功能。

有没有一种方法可以在不将所有代码放入虚拟 html 文件以使用 leadfoot 打开的情况下测试视图库?

当然,您有两种选择,这两种选择都涉及编写单元测试(不是功能测试)。一种是直接使用 Intern 的 client.html 在浏览器中 运行 单元测试,另一种是使用 WebDriver (intern-runner).

在浏览器中 运行 它们。

您的单元测试将加载您尝试测试的任何内容 类、实例化它们的实例、进行断言等。由于您的单元测试将 运行 在浏览器中进行,他们将可以访问 DOM.

请注意,您的测试不会加载测试页面,它们会加载代码模块。所以测试可能看起来像:

define([
    'intern!object', 'intern/chai!assert', 'app/View'
], function (registerSuite, assert, View) {
    var view;

    registerSuite({
        name: 'app/View',

        afterEach: function () {
            // cleanup the view after each test
            view.remove();
            view = null;
        },

        someTest: function () {
            var view = new View();
            // run tests on the view
        }
});

为了 运行 使用 WebDriver 的测试,将其列在 suites 而不是 functionalSuites in your intern 配置中,然后 运行 Intern in webdriver mode (intern-runnerintern run -w).

为了 运行 您在浏览器客户端中的测试,在您的项目目录中启动一个静态服务器(intern serve 如果使用 intern-cli),打开浏览器,然后浏览到 http://localhost:<port>/node_modules/intern/client.html?config=tests/intern(假设您的测试配置为 tests/intern.js)。