4

我有一个 rails-app,我正在尝试让我的 cucumber/capybara/selenium-webdriver 测试更快。我的大多数场景看起来像:

@javascript
Feature: Writing reports
  In order .....

  Background:
  Given I am logged in

  Scenario: Scenario 1
    ...........
  Scenario: Scenario 2
    ...........

大部分时间都花在“鉴于我已登录”中,我去注册页面创建用户并登录。身份验证是使用 Devise 实现的。

我怎样才能使我根本不必在测试环境中登录?

是否有其他最佳实践来绕过繁琐的登录步骤?(并且只保留那些专门测试登录/注册的场景的登录)

4

4 回答 4

3

您的黄瓜场景是您的生活和呼吸文档。如果您需要登录才能使用应用程序的该部分,那么您的黄瓜步骤应该明确说明。

至于你在 Capybara 的引擎盖下叫什么。您可以查看设计会话控制器并直接在集成测试中使用相同的方法调用。但是,如果 Devise 更改了它的实现,您的集成测试将会中断。在可能的情况下,您的集成测试不应关注任何底层实现细节。

最容易维护的代码和最可靠的测试是按照用户的意愿填写表单。

于 2012-10-31T00:17:27.647 回答
1

你的场景中有很多 UI 细节。这使得很难理解您真正在验证哪种行为。

场景名称提供了一些提示,但 Given/When/Then 中的具体示例包含许多混淆目的的细节。

Scenario: Login with invalid username/password
  Given I am signed out
  When I log in with invalid user credentials
  Then should I get an error message

Scenario: Login with valid username/password and valid PIN
  Given I am signed out
  When I log in with valid credentials
  then should I be greeted 

这两个示例不包含有关链接或 pin 表单的任何详细信息。我将这些视为我将在堆栈中下推的实现细节。我会将它们推送到步骤正在使用的辅助类。您似乎正在验证 Web 应用程序,我会让这些详细信息存在于支持这些步骤的页面对象中。

我还会考虑删除人称代词的使用,并将I其改为角色。系统用户的典型角色。角色有一个名字。假设我们创建了一个名为“Ann”的角色,她是一名在行政部门工作的 35 岁女性。这将使我有机会将场景重写为

Scenario: Login with invalid username/password
  Given Ann am signed out
  When Ann log in with invalid user credentials
  Then will she receive an error message

Scenario: Login with valid username/password and valid PIN
  Given Ann am signed out
  When Ann log in with valid credentials
  then should Ann be greeted 

这给了我们一些背景信息,我们知道安是谁。我们可以将她的用户名和密码保存在我们的支持类中,并期望实现能够正确使用它们。

于 2016-05-30T09:12:19.987 回答
0

如果您正在使用 Warden(Devise 在其上运行),可以查看http://blog.crowdint.com/2012/11/02/using-warden-to-login-logout-within-your-cucumber-tests.html .

作者提出了一种使用 Warden 助手代替填写表格的方法。基本上使用纯 Ruby 登录,而不是通过浏览器登录。对于专门测试登录/注销功能的场景,您仍将测试填写各个字段,但这可能会加快您的其他情况。

于 2013-03-01T22:50:20.463 回答
0
  1. 不要注册用户。就像User.create!Given 步骤的一部分。并且只能通过 Web UI 登录。

  2. 尽可能避免@javascript。通过这种方式,您可以使用设计测试助手sign_in,而不是通过 Web UI。

  3. 使用更快的 javascript 驱动程序。例如,在撰写本文时,poltergeist在我的机器上的运行速度大约是 Firefox 的两倍。

于 2014-03-23T23:00:40.893 回答