# Rack REST RSpec RSpec Matchers for REST Rack webservice Install it yourself as: $ gem install rack-rest-rspec or $ bundle add 'rack-rest-rspec' ## Usage ### Basic usage : install in your spec/spec_helper.rb or spec/prepare.rb require 'rack-rest-rspec/prepare' ### Basic usage : sample of spec matchers usage describe 'Posts REST API' do before :all do $service = RestService::new :service => MYRack::ModularApp end subject { $service } context "GET /api/v1/posts : test for a collections of Post (empty)" do it { expect(subject.get('/api/v1/posts')).to be_correctly_sent } it { expect(subject).to respond_with_status 200 } it { expect(subject).to respond_a_collection_of_record } it { expect(subject).to respond_with_collection_size 0 } end context "POST /api/v1/post : create a new record" do it { expect(subject.post('/api/v1/post',{id: 1, title: "test", body: "content"}.to_json)).to be_correctly_sent } it { expect(subject).to respond_with_status 201 } end context "GET /api/v1/posts : test for a collections of Post" do it { expect(subject.get('/api/v1/posts')).to be_correctly_sent } it { expect(subject).to respond_with_status 200 } it { expect(subject).to respond_a_collection_of_record } it { expect(subject).to respond_with_collection_size 1 } end context "GET /api/v1/post/:id : get a record by code" do it { expect(subject.get("/api/v1/post/1")).to be_correctly_sent } it { expect(subject).to respond_with_status 200 } it { expect(subject).to respond_a_record } it { expect(subject).to respond_with_data({id: 1, title: "test", body: "content"}) } end context "DELETE /api/v1/post/:id : delete a pots by id" do it{ expect(subject.delete("/api/v1/post/1")).to be_correctly_sent } it { expect(subject).to respond_with_status 204 } end end ## Available matchers : * be_correctly_send : check if return is HTTP valid * respond_with_a_collection_of_record : check if the return is a JSON Array * respond_a_record : check if the return is a JSON Hash * respond_with_collection_size : check if the collection have the good size * respond_with_data : check if the return match the given object * respond_with_status : check if the HTTP response code is the good.