0

我正在尝试为我的应用程序创建端到端测试。我刚刚进行了一个基本测试,它工作正常。

it('should not show any criterias when the application loads initially', 
    function() {
        expect(repeater('.new-criteria').count()).toBe(0);
});

上述测试工作正常。

现在,我正在ng-repeat对元素使用指令。每次单击按钮时,此重复的数组都会增加 1 个计数。因此,我编写了以下测试:

it('should show one criteria when the user adds a criteria', function() {
    element('.add-criteria').click();
    expect(repeater('.new-criteria').count()).toBe(1);
});

我正在使用 runner.html(可以在 AngularJS 端到端教程中找到)。当我加载页面时,第一次测试是成功的。但是,第二次测试导致以下错误:

Selector .add-criteria did not match any elements.

我确实有一个带有类的按钮,add-criteria如下所示:

    <button type="button" class="btn btn-inverse add-criteria" ng-click="addNewCriteria()">
        <i class="icon-plus-sign icon-white"></i> 
        Add a new criteria
    </button>

然而,测试失败了。如果我删除.add-criteria并用 替换它.new-criteria,即使这样我也会得到同样的错误。不知何故,repeater()能够获得正确的元素,但element()报告找不到匹配选择器的元素。

知道出了什么问题吗?

编辑:我想在这里补充一下,我正在使用 AngularJS 和 Node / Express。我的目录结构与angular-express-seed中的目录结构相同。我发现问题的发生是因为 CSS 和 JS 文件位于 public 文件夹中,而 HTML 页面位于 views 文件夹中。将 CSS 和 JS 文件复制到 views 文件夹解决了我的问题如何在不复制到 views 文件夹的情况下实现此目的?

4

1 回答 1

0

Angular Express Seed已经有一段时间没有更新了。它没有当前版本的angular-seed中的任何测试功能,如Github 页面上的issue #9所示。因此,我不知道您尝试运行的测试来自哪里。

我建议将项目的客户端 AngularJS 部分与服务器端 Node.js/Express 部分分离。在开发过程中使用官方的angular-seed项目。它包括一个简单的 Node.js 服务器,该服务器已经为本地开发和测试进行了预配置。它大大简化了事情。

当您想将 AngularJS 投入生产时,只使用您方便的选项提供您需要的文件:Apache、nginx、Express Node.js 服务器。你的选择。如果您决定仍然使用 Express 解决方案,那么快速的 google/SO 搜索将提供大量关于提供静态文件和重定向到 index.html 的资源。之前已经讨论过,解决方案并不复杂。

这个答案显然不能解决您似乎遇到的问题,但我们需要比您提供的更多信息。如果您阐明了如何构建开发环境(当 angular-express-seed 不包含测试时,您如何运行测试?),那么我们可能会为您似乎遇到的路由问题提供解决方案。目录结构、app.js代码等会有所帮助。

于 2013-04-16T06:57:57.923 回答