ruby-on-rails - AngularJS 和 Rails - e2e 睾丸测试。如何登录用户来测试 Angular 页面?

标签 ruby-on-rails testing tdd angularjs karma-runner

这是我遇到的问题。这是我正在处理的代码。代码大多是用 Rails 和 Haml View 文件编写的典型 MVC。

该应用程序的一部分是利用 AngularJS 在浏览器中完成所有很酷的 MVC。

这里没有问题。

为了使用应用程序的这一部分,用户必须登录,这里出现问题:

我注意到以下有趣的行为:
如果我指示我的测试使用 chrome 访问登录(或任何其他)页面

beforeEach(function() {
  browser().navigateTo('/help');
});

测试如下:

it('should scream for help', function() {
  expect(element('#test').text()).toMatch('Help!');
});

和 HTML

<div>
  <h1>Help</h1>
  <p id="test">Help!</p>
</div>

我得到的是卡住的浏览器,其余的测试未执行。现在,当我向网站元素添加 Angular 时:

<div ng-app>
  <h1>Help</h1>
  <p id="test">Help!</p>
</div>

测试按预期运行(红色和绿色)。

这给我带来的问题是,我几乎不知道如何登录我的用户(使用“before all” block 之类的东西),以便我可以愉快地对 Angular 功能进行测试。

对于非 javascript 的东西,我使用 RSpec 和 Capybara,我可以方便地调用sign_in user。

有人知道如何登录用户(使用非 anguar 页面)吗?也许有更好的方法来处理这个测试?我正在考虑使用 PhantomJS,就像你在 Railscasts 第 391 集中看到的那样,但我想使用 Google 推荐的工具。我不够聪明,无法重新发明轮子:)。

高度赞赏所有建议。

最佳答案

好吧,这就是我所做的(如果您有更好的解决方案,我将不胜感激):

  1. 我用的是睾丸
  2. 由于登录表单未“启用 Angular ”,我将 ng-app 添加到围绕表单的 div
  3. 我在输入字段中添加了 ng-model“登录名”和“密码”
  4. 因为我有可以使用的

    input('密码').enter('密码在此处');

  5. 然后只需单击“提交”即可。

现在,这就是棘手的地方:

当我想执行我工作中“重要”的所有测试时,我得到了:

warn (proxy): Proxy Request failed - Error: socket hang up 

我意识到这是由于睾丸在从用户登录的服务器获得响应之前执行剩余指令引起的。

所以我添加了pause(); (如果您遇到同样的问题,您可以添加任何您想要的内容,让它稍等一下)

绿色

关于ruby-on-rails - AngularJS 和 Rails - e2e 睾丸测试。如何登录用户来测试 Angular 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14640621/

相关文章:

java - 如何初始化数组以便稍后在测试方法中使用 (Java)

python - 使用 setUpTestData 的 Django 测试不会保留测试之间的更改

unit-testing - 测试驱动设计如何帮助一个人的软件项目?

ruby-on-rails - 如何使用 RSpec 测试 ActionText?

ruby-on-rails - 如何使 Rails View .erb 文件打印 URL 的最后一部分?

ruby-on-rails - 在 Rails 中测试库/例程(即不是模型或 Controller )的方法

debugging - 如果我不花很多时间调试,做 TDD 有意义吗?

ruby-on-rails - 如何自定义事件管理布局?

java - 添加 @after 钩子(Hook)会影响包中的所有测试

tdd - 使用 TDD : "top down" vs. "bottom up"