The first step is to add the rspec gem to your
Gemfile and run bundle
source "http://rubygems.org" gem 'sinatra' group :test do gem 'rspec' endNext you need to create the
spec directory and add the spec_helper.rb file
require File.join(File.dirname(__FILE__), '..', 'app.rb') require 'sinatra' require 'rack/test' # setup test environment set :environment, :test set :run, false set :raise_errors, true set :logging, false def app Sinatra::Application end RSpec.configure do |config| config.include Rack::Test::Methods endThis is for a classic style sinatra app, if you are using a modular app, you need to make some slight modifications for it to work. I'll show how to do that in a later post.
And finally you are ready to create the spec file that corresponds to the
app.rb
require 'spec_helper'
describe "Sinatra App" do
it "should respond to GET" do
get '/'
last_response.should be_ok
last_response.body.should match(/It works!/)
end
end
I usually don't use rspec for integration tests, for that I use cucumber. I normally use rspec for unit testing, but since this is a sample app and I don't have any models to test, I included this test for completeness sake. I'll write another blog post how to add cucumber tests to this sample sinatra app later.To make life easier, I've added a rake task to run the rspec tests
require 'rspec/core/rake_task' desc "run specs" RSpec::Core::RakeTask.newAnd then I've updated the deployment task to require the rspec task, so we can't update the application unless it passes all tests.
namespace :vmc do
desc "update cloud foundry deployment"
task :update => [:bundle, :spec] do
sh "vmc update #{VMC_APP_NAME}"
end
end
I've created a github repository for this app to make it easier for you to use it as a template.
I think it's wrong to show people how "You can do something". Why?
ReplyDeleteANS: Because that is not how you "Martin" normally do it. It is most helpful to show people how you actually do it because that is the way it works for you.
In this case I would show people how you create database backed Modular Sinatra Apps.
And the most important bit is How you incorporate Cucumber, Why you prefer it for the Purpose you use it. The same for RSpec, MiniTest etc.
Because being wishy-washy doesn't really show understanding but doubt. There is a lot of ways to do it, but show us how and why you do it your way.
Thanks.
Nelson
Nelson,
Deleteunfortunately I can't always publish how I do things in an existing project, as I'm not allowed to make it public. I can write a post on which testing framework I prefer and why, but this post sprung out of the lack of documentation on how to get rspec & sinatra playing together.
/M
I found the post useful as I get started writing tests for sinatra. Thanks!
ReplyDelete