我想使用spec.rb文件中所有“features”都可以访问的“given”(或“let”)设置一个变量。我该怎么做?“给定”语句应位于文件中的何处?谢谢!

require 'spec_helper'

feature "Home page" do
  given(:base_title) { "What Key Am I In?" }
  scenario "should have the content 'What Key Am I In?'" do
    visit '/static_pages/home'
    expect(page).to have_content('What Key Am I In?')
  end

  scenario "should have the title 'What Key Am I In? | Home'" do
    visit '/static_pages/home'
    expect(page).to have_title("#{base_title}")
  end

  scenario "should not have a custom page title | Home'" do
    visit '/static_pages/home'
    expect(page).not_to have_title("| Home")
  end
end

feature "About page" do
  scenario "should have the content 'About'" do
    visit '/static_pages/about'
    expect(page).to have_content('About')
  end

  scenario "should have the title 'What Key Am I In? | About'" do
    visit '/static_pages/about'
    expect(page).to have_title('What Key Am I In? | About')
  end
end

最佳答案

given/let调用用于feature/describe/context块的顶部,并应用于所有包含的feature/describe/contextscenario/it块。在您的例子中,如果您有两个独立的feature块,那么您需要将它们封装在一个更高级别的feature/describe/context块中,并放置您希望应用于所有更高级别的given/let调用。
引用rspec中使用的capybara文档:
feature实际上只是describe ..., :type => :feature的别名,backgroundbefore的别名,scenarioit的别名,
分别为given/given!let/let!别名。
此外,在rspec中,describe块(无论是通过describecontext或水豚别名feature表示)可以任意深度嵌套。相比之下,在黄瓜中,feature只能存在于规格的顶层。
你可以谷歌“rspec嵌套描述”获得更多信息。

关于ruby-on-rails - 在 capybara 中使用带有功能/场景的给定/允许,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17864449/

10-13 02:12