-
Notifications
You must be signed in to change notification settings - Fork 0
Sinatra
You can use Cucumber with Sinatra and Webrat!
Just make sure you have a features/support/env.rb file with the following:
app_file = File.join(File.dirname(__FILE__), *%w[.. .. app.rb])
require app_file
# Force the application name because polyglot breaks the auto-detection logic.
Sinatra::Application.app_file = app_file
require 'spec/expectations'
require 'rack/test'
require 'webrat'
Webrat.configure do |config|
config.mode = :rack
end
class MyWorld
include Rack::Test::Methods
include Webrat::Methods
include Webrat::Matchers
Webrat::Methods.delegate_to_session :response_code, :response_body
def app
Sinatra::Application
end
end
World{MyWorld.new}
You may have to set the app_file in your app file. Otherwise Sinatra (at least version 0.9.1.1) won’t find the views or layouts (see this irc log) e.g.,
# In your main application file
configure do
set :views, "#{File.dirname(__FILE__)}/views"
end
You can also use Cucumber with Sinatra using Sinatra’s built-in testing setup and Test Harness_. Make sure you have something like the the following, tailored to Test::Unit, RSpec, Bacon or Test::Spec, in your features/support/env.rb.
require File.dirname(__FILE__) + "/../../your_sinatra_app"
# RSpec matchers
require 'spec/expectations'
# Required for RSpec to play nice with Sinatra/Test
require 'spec/interop/test'
# Sinatra/Test
require 'sinatra/test'
Test::Unit::TestCase.send :include, Sinatra::Test
World do
Sinatra::TestHarness.new(Sinatra::Application)
end
You can also use Cucumber with Sinatra using Bryan Helkamp’s rack-test and Webrat. You can check out the rspec examples in the hancock application. Something like the following should be setup in your features/support/env.rb.
require File.expand_path(File.dirname(__FILE__)+'/../../spec_helper')
require 'haml'
MyApp::App.set :environment, :development
World do
def app
@app = Rack::Builder.new do
run MyApp::App
end
end
include Rack::Test::Methods
include Webrat::Methods
include Webrat::Matchers
end