使用Rspec Rails 3中的功能规范嵌套方案

时间:2014-03-17 22:14:26

标签: ruby-on-rails rspec ruby-on-rails-4 capybara integration-testing

我正在使用带有Capybara的Rspec Rails进行测试,我想在RSpec Rails 3中使用新的feature spec作为read more as customer tests and acceptance tests。但是,我发现旧版(Describe / It)风格缺少的一件事是嵌套。尝试在scenarios块中嵌套background或使用scenario时,出现undefined method错误。无论如何,我可以通过功能规范来实现嵌套来获得这样的东西(来自Michael Hartl的Ruby On Rails Tutorial

describe "Authentication" do
    subject { page }

    describe "authorization" do
        let(:user) { FactoryGirl.create(:user) }

        describe "for non-signed in users" do

            describe "when attempting to visit a protected page" do
                before { visit edit_user_path(user) }
                it "should redirect_to to the signin page" do
                    expect(page).to have_title('Sign in')
                end

            describe "after signing in" do
                before do
                    valid_signin user, no_visit: true
                end

                it "should render the desired protected page" do
                    expect(page).to have_title('Edit user')
                end

或者我应该以不同的方式思考集成测试?

2 个答案:

答案 0 :(得分:11)

https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec中所述,feature对应describescenario对应it。因此,您可以嵌套feature的实例,但无法在scenario中嵌套scenario,就像您无法在it中嵌套it一样。

答案 1 :(得分:6)

feature

中提供了嵌套scenarios Capybara version 2.2.1

在Gemfile中包括

gem "capybara", "~> 2.2.1"

bundle install

根据Capybara的官方文件

  

功能实际上只是 describe ...的别名,:type => :特征,   背景之前的 方案给定 / *的别名给予!的*   分别为 / * let! *的别名。

以下是original issue,后来在版本2.2.1中为accepted and merged