Ruby on rails 如何在cucumber场景中跳过登录以加快测试速度?

Ruby on rails 如何在cucumber场景中跳过登录以加快测试速度?,ruby-on-rails,cucumber,capybara,selenium-webdriver,Ruby On Rails,Cucumber,Capybara,Selenium Webdriver,我有一个rails应用程序,我正在尝试让cucumber/capybara/selenium webdriver测试更快。我的大多数场景如下所示: @javascript Feature: Writing reports In order ..... Background: Given I am logged in Scenario: Scenario 1 ........... Scenario: Scenario 2 ........... 大部分时

我有一个rails应用程序,我正在尝试让cucumber/capybara/selenium webdriver测试更快。我的大多数场景如下所示:

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

  Background:
  Given I am logged in

  Scenario: Scenario 1
    ...........
  Scenario: Scenario 2
    ...........
大部分时间都花在“给定我已登录”上,在这里我转到注册页面创建用户并登录。身份验证是使用designe实现的

如何使我不必在测试环境中登录?


是否有其他最佳实践可以绕过繁琐的登录步骤?(并且仅在专门测试登录/注册的场景中保持登录)

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

至于你在水豚岛的引擎盖下叫什么。您可以查看Desive会话控制器,并在集成测试中直接使用相同的方法调用。然而,如果Desive更改了它的实现,您的集成测试将失败在可能的情况下,您的集成测试不应涉及任何底层实现细节。

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

如果您使用的是Warden(该设备运行),可能会签出

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

  • 不要让用户注册。只需
    User.create作为给定步骤的一部分。并且只能通过web UI登录

  • 尽可能避免使用
    @javascript
    。通过这种方式,您可以使用designe test helper
    登录
    ,而不是通过web UI

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


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

    场景名称给出了一些提示,但是给定的/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表单的任何详细信息。我将这些视为我将在堆栈中向下推的实现细节。我会将它们推送到步骤正在使用的helper类。您似乎正在验证一个web应用程序,我会让这些细节存在于支持这些步骤的页面对象中

    <>我也会考虑删除个人PrimoM<代码> i>代码>,然后改为角色。系统用户的典型角色。角色有一个名字。假设我们创建了一个名为“安”的角色,她是一名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 
    

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

    您的config/initializer/designe.rb是否已经有了
    config.streams=Rails.env.test?1:10
    ?谢谢。是的。由于似乎没有人对登录步骤有问题,我分析了应用程序,发现了一个问题。现在快多了。但我仍然想知道是否真的没有办法绕过登录?不,在像Capybara和Cucumber这样的全堆栈测试中没有。