我需要在每个站点页面上测试边栏。我定义用户方法test_all_sidebars
并填写
def test_all_sidebars
test_header
test_contacts
test_news
test_footer
end
那么我需要测试一页2个边栏不会显示。示例:
describe "Home page" do
before { visit root_path }
test_all_sidebars
end
describe "Contact page" do
before { visit contact_path }
test_header
test_footer
test_news(false)
test_contact(false)
end
我试图用类似的选项定义test_news
和test_contact
def test_contacts(flag: true)
describe "sidebar with contacts" do
it { (:flag ? should : should_not) have_content('phone: ') }
end
但它不起作用。我有unexpected tIDENTIFIER, expecting '}'
我尝试使用let
def test_contacts(flag: true)
if :flag then
let(:sh) { should }
else
let(:sh) { should_not }
end
it { sh have_content('phone: ') }
end
但这仍然不起作用。
我的问题是:怎么做?如何使用输入数据条件以相同的方法使用should
/should_not
?
def test_contacts(flag: true)
describe "sidebar with contacts" do
it { (:flag ? should : should_not) have_content('phone: ') }
end
end
这个代码有很多错误:
:flag
是总是真的,因为它是一个符号。如果要检查值是否传递给true
,则应使用flag
(变量(,而不是:flag
(符号(should
和should_not
是方法,所以实际上您需要调用should(have_content('phone: ')
或should_not(have_content('phone: ')
——您无法将方法调用与发送它的变量分开
所以,在你的描述中,你的代码应该看起来像:
it { flag ? should(have_content('phone: ')) : should_not(have_content('phone: ') }
除此之外,我从未见过这种编写rspec测试用例的模式,我确信您最好使用更好的习惯用法,如shared_examples_for