保持rspec测试干燥

保持rspec测试干燥,rspec,Rspec,我有以下rspec测试 feature "#Create New User" do scenario "Sign In" do sign_in end scenario "direct to create new user page" do click_link 'Admin' click_link 'User Maintenance' click_link 'Create' end it "user name must not be

我有以下rspec测试

 feature "#Create New User"  do

  scenario "Sign In" do
    sign_in
  end

  scenario "direct to create new user page" do
    click_link 'Admin'
    click_link 'User Maintenance'
    click_link 'Create'
  end

  it "user name must not be blank" do
    fill_in "user_name", :with => ""
    select2("Loanstreet", "UserType")
    expect(page).to have_content "Name can't be blank" 


  it "user name length must longer than 5" do
    fill_in "user_name", :with => "Euge"
    select2("Loanstreet", "UserType")
    expect(page).to have_content "Name length must be longer than 5" 

  end
end
我的问题是,在用户登录之后?第一个场景通过,但其余场景失败。有没有办法确保其他人也能通过?我知道它失败是因为第一个场景之后的“结束”。那么,如何在一个页面中进行多个测试,或者在一个页面中进行嵌套测试呢


感谢任何帮助

请注意,
场景
,和是别名,因此它们做的是相同的事情

feature "#Create New User"  do

  # These two scenarios should not be like that, these are just 
  # preparations required by the other scenarios to pass
  # scenario "Sign In" do
  #  sign_in
  # end

  # scenario "direct to create new user page" do
  #  click_link 'Admin'
  #  click_link 'User Maintenance'
  #  click_link 'Create'
  # end

  # they should be used in a before hook, which will be run before 
  # each scenario
  before do
    sign_in        
    click_link 'Admin'
    click_link 'User Maintenance'
    click_link 'Create'
  end 

  # or you can make it a before :all so that it runs only once 
  # before all the scenarios
  # before :all do
  #  sign_in        
  #  click_link 'Admin'
  #  click_link 'User Maintenance'
  #  click_link 'Create'
  # end 

  # it "user name must not be blank" do
  scenario "changes user name with a blank string" do
    fill_in "user_name", :with => ""
    select2("Loanstreet", "UserType")
    expect(page).to have_content "Name can't be blank" 
  end

  # it "user name length must longer than 5" do
  scenario "changes user name with a string shorter than 5" do
    fill_in "user_name", :with => "Euge"
    select2("Loanstreet", "UserType")
    expect(page).to have_content "Name length must be longer than 5" 
  end
end

因此,每次我都必须在每个场景中执行上述操作。没有其他方法只执行一次并调用多个测试。还是rspec唯一允许的方式?感觉每次登录都像是很多功能重复。但是感谢@nafaa的回答,您可以在
spec\u helper
rails\u helper
文件中执行此操作,
Rspec.before do sign\u in end
但这不是此功能的目的。如果需要,可以定义一个进行登录的函数。需要的时候就打电话。这是建立和准备示例的正确方法,我想他们没有其他方法。