RSpec - “POST”动作只被调用一次

时间:2014-11-11 11:54:45

标签: ruby-on-rails ruby testing rspec

我在调用' POST'时遇到问题。我的测试服只有一次方法。

let(:foo) {post :foo_controller arguments}


it 'FIRST: should validate post response first field' do
  expect(foo[:first_field]).to match('something')
end

it 'SECOND: should validate post response second field' do
    expect(foo[:second_field]).to match('something else')
end

现在foo" POST"动作被调用两次。 我想说明第一个请求' POST'并获取一个请求值,但SECOND只获取一个值,该值是持久的,而不调用此' POST'。

有没有一种优雅的方法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以使用before(:all)块,但不确定实际返回的帖子。

before(:all) do
  @my_response = post :foo_controller arguments
end

希望有所帮助!

答案 1 :(得分:0)

我是一个帮助我解决这个问题的小帮手。

这是辅助模块:

module ControllerSpecHelpers

  # example: 
  #
  # describe 'my request' do
  #   examine_response {get '/foo/bar'}
  #   it {should be_ok}
  # end
  #
  #
  def examine_response &block
    before(:all) do 
      self.instance_exec &block
    end
    subject {last_response}
  end

end

我配置Rspec在我的规范助手中使用它:

RSpec.configure do |conf|
  # snip ...
  conf.extend ControllerSpecHelpers
end

然后当我只需要执行一次调用并测试多个属性时,我就这样使用它:

describe "when signing up" do
  examine_response do
    post "/signup", {email: 'signup@test.com', password: 'password'}
  end

  it {should be_ok}
  it "body says welcome" do
    expect(subject.body).to include 'welcome'
  end
end

这里有关于扩展Rspec如何工作的更多细节: http://timnew.github.io/blog/2012/08/05/extend-rspec-dsl/