我需要在每个网站页面上测试侧边栏。
我定义用户方法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
?
答案 0 :(得分:1)
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