我想使用“given”(或“let”)设置一个变量,该变量可以通过spec.rb文件中的所有“功能”访问。我该怎么做呢? “给定”声明应该放在文件中的哪个位置?谢谢!
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
答案 0 :(得分:8)
given/let
次调用位于feature/describe/context
块的顶部,适用于所有包含的feature/describe/context
或scenario/it
块。在您的情况下,如果您有两个单独的feature
块,则需要将它们放在更高级feature/describe/context
块中,并将要应用的given/let
个调用放在所有feature
块中。更高的水平。
引用在RSpec中使用的水豚文档:
describe ..., :type => :feature
实际上只是background
的别名,before
是scenario
的别名,it
是given/given!
的别名, 和let/let!
的{{1}}别名。
此外,在RSpec中,describe
块(无论是通过describe
,context
还是Capybara别名feature
表示)都可以任意嵌套。相比之下,在Cucumber中,feature
只能存在于规范的顶层。
您可以通过Google“rspec nested describe”获取更多信息。
答案 1 :(得分:0)
您必须在context
中使用feature
来解决您的问题。
feature 'Static page' do
given(:base_title) { "What Key Am I In?" }
context 'Home page' do
# code
end
context 'About page' do
# code
end
end
两个旁注:
context
的别名,您可以直接使用它。