如何跳过黄瓜场景中的登录以进行测试?

时间:2012-10-24 20:36:57

标签: ruby-on-rails cucumber capybara selenium-webdriver

我有一个rails-app,我正在尝试更快地制作我的黄瓜/水豚/ selenium-webdriver测试。我的大部分场景都是:

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

  Background:
  Given I am logged in

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

大部分时间花在“我已登录”上,然后我转到注册页面创建用户并登录。使用Devise实现身份验证。

我怎样才能让我根本不需要在测试环境中登录?

是否有其他最佳做法可以解决繁琐的登录步骤?(并且只保留登录,以便专门测试登录/注册的场景)< / p>

4 个答案:

答案 0 :(得分:3)

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

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

最简单的维护代码和最可靠的测试将是用户填写表单。

答案 1 :(得分:1)

您的方案中有很多UI deails。这使得很难理解您确实在验证哪种行为。

方案名称提供了一些提示,但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 

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

我还会考虑删除个人代词I的用法,并将其更改为角色。对于系统用户而言典型的角色。角色有一个名字。假设我们创造了一个名为“Ann&#39;谁是一名在行政部门工作的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 

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

  1. 不要为用户注册。只需User.create!作为Given步骤的一部分。并且只能通过网络用户界面签名。

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

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