2

这是我面临的问题。有我正在处理的代码。代码大多是用带有 Haml 视图文件的 Rails 编写的典型 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>

我得到的是冻结的浏览器,其余的测试没有执行。现在,在我向网站元素添加角度的那一刻:

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

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

这导致我的问题是我几乎不知道如何登录我的用户(使用“之前所有”块),以便我可以愉快地执行我的角度功能测试。

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

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

高度赞赏所有建议。

4

2 回答 2

2

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

  1. 我用睾丸
  2. 由于登录表单没有“启用角度”,我将 ng-app 添加到 div 环绕表单
  3. 我在输入字段中添加了 ng-model "login" 和 "password"
  4. 因为我有我可以使用的

    input('password').enter('PASSWORD GOES HERE');

  5. 然后只需单击提交,等等。

现在,这是棘手的:

当我想执行我工作中“肉和土豆”的所有测试时,我得到了:

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

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

所以我添加了 pause(); (如果您遇到同样的问题,您可以添加任何您想要让它稍等片刻的东西)

绿色

于 2013-02-07T02:48:38.787 回答
0

基本上你想将用户登录名/密码发布到 beforeEach 中的登录表单。为此编写一个函数,查看 angular-scenario.js 中的 browser() 对象。

于 2013-02-05T23:24:14.230 回答