Capybara:在许多`它'的例子中使用`within`?

时间:2014-01-02 14:02:40

标签: rspec capybara

在视图测试中,我想要执行以下操作(不完全是这样,但它解释了这一点):

  within 'ul' do
    it { should have_selector 'li', text: 'Some text' }
    it { should have_selector 'li', text: 'Some other text' }
  end

可悲的是,within方法似乎仅在it块中可用。

我可以将规范重写为以下内容:

    it { should have_selector 'ul li', text: 'Some text' }
    it { should have_selector 'ul li', text: 'Some other text' }

但这对我来说似乎是多余的。

那么:有没有办法为许多it个例子指定上下文?

2 个答案:

答案 0 :(得分:3)

不,你不能在it之外使用Capybara逻辑。但是,您可以在单个it中使用多个期望,如下所示:

it "should have selectors" do
  within 'ul' do
    should have_selector 'li', text: 'Some text'
    should have_selector 'ul li', text: 'Some other text'
  end
end

如果你真的需要/想要单独的it块,那么一种方法是使用“共享示例”,尽管在这种特殊情况下这似乎有些过分。

答案 1 :(得分:1)

您可以使用subject指定ul元素作为示例的上下文:

subject { page.find('ul') }
it { should have_selector 'li', text: 'Some text' }
it { should have_selector 'li', text: 'Some other text' }