ruby on rails-尝试通过方法选项定义should或should_not



我需要在每个站点页面上测试边栏。我定义用户方法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_newstest_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

这个代码有很多错误:

  1. :flag总是真的,因为它是一个符号。如果要检查值是否传递给true,则应使用flag(变量(,而不是:flag(符号(
  2. shouldshould_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

相关内容

  • 没有找到相关文章

最新更新