在rspec请求规范中使用请求方法

时间:2014-03-17 09:46:03

标签: ruby-on-rails ruby rspec

我正在尝试使用rspec测试几个控制器之间的场景。

我认为“请求规格”是我应该使用的方法。

主要问题是我使用请求环境使用基本身份验证登录。

我的控制器测试效果很好:

describe ClientsController do
  context "With a confirmed user" do
    before(:each) do
      @password = "bidon-bidon"
      @user = ...
    end

    it "should create session" do
      request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, @password)
      post :create
      response.should be_success
    end
  end
end

但是当我将request方法用于我的文件spec/requests/scenario_spec.rb时,会引发异常:

describe "My scenario" do
  context "With a confirmed user" do
    before(:each) do
      ...
    end

    it "should do several things"
      request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, @password)
      post :create
      response.should be_success

      ... some calls to other controllers
    end
  end
end

request方法似乎返回nil

NoMethodError:  undefined method `env' for nil:NilClass

我的问题是:

  • 我在哪里可以找到有关request方法的文档?
  • 我该如何设置?

我正在使用Rails 4和Rspec 2.14.7。

1 个答案:

答案 0 :(得分:4)

取自这个问题 - Is it possible to specify a user agent in a rails integration test or spec?

尝试:

it "should do several things"
  post :create, {}, 'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(@user.login, @password)
  response.should be_success

  ... some calls to other controllers
end