如何在功能rspec中添加上下文?

时间:2014-05-21 22:01:55

标签: ruby-on-rails rspec

我想在我的功能rspec中添加上下文,但我不确定上下文和场景之间有什么意义。

这是我到目前为止所做的:

feature 'As an admin I manage the orders of the system' do
  context 'Logged in user who is an admin' do
    before(:each) do
      admin = create(:admin_user)
      login_as(admin, :scope => :user)
    end

    scenario 'User sees all the orders' do
      visit admin_orders_path
      expect(page).to have_content('List of orders')
    end
  end

  context 'Logged in user who is not an admin' do
    before(:each) do
      user = create(:user)
      login_as(user, :scope => :user)
    end

    scenario 'User cannot see the orders' do
      visit admin_orders_path
      expect(current_path).to eq('/')
    end
  end

end

这是否有意义,或者我应该在使用场景或上下文之间做出决定,但不是两者都在一起?

2 个答案:

答案 0 :(得分:2)

我认为我的测试方式如下:

Feature规范是用于测试整个“图片”的高级测试 - 应用程序的功能。

因此,我的应用的核心功能:features内置scenarios

单元测试:describeit

虽然你可以使用context

来自documentationfeaturescenario分别对应describeit。这些方法只是允许使用特征规范的别名 阅读更多作为客户测试和验收测试。

因此,在您的情况下,我会执行以下操作:

feature 'As an admin I manage the orders of the system' do
  context 'user is logged in as' do 

    before(:each) do
      user = create(:user)
      login_as(user, :scope => :user)
    end

    scenario 'an admin, can see all the orders' do
       visit admin_orders_path
       expect(page).to have_content('List of orders')
     end

    scenario 'not an admin, cannot see the orders' do
      visit admin_orders_path
      expect(current_path).to eq('/')
  end
end

一个context,两个scenarios用户。另外,我会更多地考虑一下该功能的描述。希望有帮助,不要让你更加困惑!

另外,我喜欢看我的测试,就像我的应用程序的“心跳”。首先,您从功能测试(外部,核心功能)开始,然后进入内部(单元测试)。那件事情一直在重复,就像一个“心跳”

答案 1 :(得分:1)

根据docs

  

功能和方案DSL对应describeit,   分别。这些方法只是允许使用特征规范的别名   阅读更多作为客户测试和验收测试。

编写功能规范时,您只需将describe(或context)替换为feature即可。嵌套时feature语句应该有效,例如describe