AngularJS:端到端测试问题

时间:2013-04-15 15:05:47

标签: angularjs karma-runner

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

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文件位于公共文件夹中,而HTML页面位于views文件夹中。 将CSS和JS文件复制到views文件夹解决了我的问题如何在不复制到views文件夹的情况下实现此目的?

1 个答案:

答案 0 :(得分: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代码等会有所帮助。