Ruby on rails 背景和持久性场景(或先决条件)

Ruby on rails 背景和持久性场景(或先决条件),ruby-on-rails,ruby-on-rails-3,cucumber,Ruby On Rails,Ruby On Rails 3,Cucumber,我有这个问题 现在我已经为一系列多部分表单步骤中的每一步编写了单独的场景。我有一个Background部分来设置每个场景。但是现在,当我运行整个功能时,cucumber希望为每个场景重复背景。我想测试一个基于之前所有场景的场景 以下是我的功能的大致轮廓: Feature: Submit a manuscript In order to complete a manuscript submission As a corresponding author I want to comple

我有这个问题

现在我已经为一系列多部分表单步骤中的每一步编写了单独的场景。我有一个
Background
部分来设置每个
场景。但是现在,当我运行整个功能时,cucumber希望为每个
场景重复
背景。我想测试一个基于之前所有场景的
场景

以下是我的功能的大致轮廓:

Feature: Submit a manuscript
  In order to complete a manuscript submission
  As a corresponding author
  I want to complete the to-do list

  Background:
    Given I am logged in as "Steve"
    And an article_submission "Testing Web Apps" exists
    And "Steve" is a "Corresponding Author" for "Testing Web Apps"
    And I am on the manuscript to-do list page for "Testing Web Apps"

  Scenario: Steve suggests reviewers for his manuscript
    ...
  Scenario: Steve completes the manuscript fees to-do item
    ...
  Scenario: Steve wants to add Barbara as a co-author
    ...
  Scenario: Steve uploads necessary files
    ...
  Scenario: Steve edits the fees page and general information page
    ...
  Scenario: Steve re-uploads the manuscript file
    ...
  Scenario: Steve completes the Copyright Transfer
    ...
  Scenario: Steve completes Author Responsibilities & Agreement
    ...
  # These scenarios depend on all the previous ones having run  
  Scenario: Steve Completes submission
    ...
  Scenario: Steve goes back and make changes
    ...
  Scenario: Steve fills out payment page
是否有方法要求运行以前的场景?有没有办法只运行一次
后台

我决定将应用程序“冻结”到运行该功能后立即处于的状态。为此,我添加了转储和加载数据库的挂钩

features/support/hooks.rb中,我有:

After('@complete-submission') do
  # Dump the database
  exec "mysqldump -u root --password=### onc_test > #{Rails.root}/support/submission.sql"
end

Before('@load-submission') do
  # Load the database
  exec "mysql -u root --password=### onc_test < #{Rails.root}/support/submission.sql"
end
(“@complete submission”)之后的
do
#转储数据库
exec“mysqldump-u root--password=####onc_test>#{Rails.root}/support/submission.sql”
结束
在('@load submission')之前
#加载数据库
exec“mysql-u root--password=###onc#u test<#{Rails.root}/support/submission.sql”
结束

这基本上是可行的,除了
@load submission
神秘地无法运行场景,但数据库已加载。所以我必须在没有标签的情况下再次运行它。也许有人能帮我弄清楚这一点。

我想你可能让事情变得更难了。您列出的场景对我来说就像场景中的步骤一样。正如Pan在回答您链接到的问题时提到的,您的场景应该是自包含的,而不是像这样在它们之间存在依赖关系。如果是我,我会把背景和场景压缩成一小部分(最后的3个场景可能会变成1个场景),然后使用更高级别的步骤,比如“给定Steve已经完成了手稿提交”,并在这些步骤中进行验证,以确保每一步都有效。这些场景大部分是独立的。相信我,这些情景并不短暂。我已经走了几百步了。将它们结合在一起会使阅读变得更加困难,而且不那么独立。我尽可能地进行重构,将常用的步骤移动到步骤定义文件中。我认为我真正需要的是一种方法,在一个功能运行后冻结数据库,然后在下一个依赖功能之前加载它。我们的应用程序的工作方式是,作者有一个漫长的工作流程,然后是审阅者,还有一个是修订过程。每个工作流取决于前一个工作流设置的条件。我已经有很多装置和工厂在加载数据,但我需要的是一个能同时创建所有模型的工厂。我不想每次需要测试特性C时都重复特性A和B。