lbnivw
Last Updated: February 25, 2016
·
1.849K
· g33konaut
D38ff2119d6ace825b4c7b64e6f422d8

Share RSpec examples that make multiple requests

Say you have a bunch of controllers and all of them need to behave in a specific way (for example they should all respond with a BAD_REQUEST when parameters are missing) and you want to check it for a whole set of parameters like this:

it "should check for missing parameters" do
  params = { :required1 => "a", :required2 => "b" }
  params.each_key do |key|
    result = request_proc.call(params.except(key))
    result.should be_bad_request
  end
end

Now, assuming that you implemented this in ApplicationController, you cannot be sure, that each controller really behaves like this (it may be overridden).
You could repeat this snippet in every controller, but that is not DRY.

The third option is to create a sharedexamplesfor group and pass a proc for making the request, to keep it portable between the different requests:

shared_examples_for "ApplicationController" do |params|
  it "should complain about missing parameters" do
    params.each_key do |key|
      result = request_proc.call(params.except(key))
      result.should be_bad_request
    end
  end
end

and use it in your specs:
describe "POST 'new'" do
let(:requestproc) { lambda { |params| post 'new',params } }
it
behaves_like "ApplicationController", { :required1 => "a", :required2 => "b"}

Say Thanks
Respond