【问题标题】:How to reuse a context in RSpec?如何在 RSpec 中重用上下文?
【发布时间】:2014-01-06 17:13:08
【问题描述】:

我是 RSpec 的新手,我只是想知道如何在控制器中的多个操作中重用上下文。具体来说,我有这样的代码:

describe "GET index" do
  context "when authorized" do
    ...
  end

  context "when unauthorized" do
    it "denys access"
  end
end

describe "GET show" do
  context "when authorized" do
    ...
  end

  context "when unauthorized" do
    it "denys access"
  end
end

...

我想把它弄干一点。未经授权的上下文在每个操作上都是相同的,我该如何重用它?

【问题讨论】:

    标签: ruby-on-rails ruby rspec dry controllers


    【解决方案1】:

    分享的例子是你的朋友:

    创建一个新文件,例如 spec/shared/unauthorized.rb 并将其包含在您的 spec_helper 中,然后将其格式化如下:

    shared_examples_for "unauthorized" do
      context "when unauthorized" do
        it "denys access"
      end
    end
    

    然后在您的规格中:

    include_examples "unauthorized"
    

    在每个描述块中都这样做,你应该是金子。

    【讨论】:

      【解决方案2】:

      如果你使用流行的 gem Devise,你可以像这样重用设计映射:

      require "spec_helper"
      
      describe Worksheet::CompanyController do
        login_user_admin #<= this macros on /spec/support/controller_macros.rb
      
        describe '#create' do
          it 'admin login and create worksheet' do
            post :create, worksheet_company: attributes_for(:"Worksheet::Company")
            expect(response.status).to eq(302)
            expect(response).to redirect_to(admin_root_path)
          end
        end
      

      创建并登录 admin_user spec/support/controller_macros.rb

      module ControllerMacros
        def login_user_admin
          before(:each) do
            @request.env["devise.mapping"] = Devise.mappings[:user_admin]
            user_admin = FactoryGirl.create(:user_admin)
            user_admin.confirm!
            sign_in user_admin
          end
        end
      end
      

      spec/spec_helper.rb:

      RSpec.configure do |config|
        ...
        config.include Devise::TestHelpers, type: :controller
        config.extend ControllerMacros, type: :controller
        ...
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        相关资源
        最近更新 更多