README.textile in combustion-0.1.1 vs README.textile in combustion-0.2.0

- old
+ new

@@ -1,7 +1,128 @@ h1. Combustion -More information/documentation coming soon. +Combustion is a library to help you test your Rails Engines in a simple and effective manner, instead of creating a full Rails application in your spec or test folder. +It allows you to write your specs within the context of your engine, using only the parts of a Rails app you need. + +h2. Usage + +Get the gem into either your gemspec or your Gemfile, depending on how you manage your engine's dependencies: + +<pre><code># gemspec +gem.add_development_dependency 'combustion', '~> 0.2.0' +# Gemfile +gem 'combustion', '~> 0.2.0`, :group => :development</code></pre> + +In your @spec_helper.rb@, get Combustion to set itself up - which has to happen before you introduce @rspec/rails@ and - if being used - @capybara/rspec@. Here's an example within context: + +<pre><code>require 'rubygems' +require 'bundler' + +Bundler.require :default, :development + +Combustion.initialize! + +require 'rspec/rails' +require 'capybara/rspec' + +RSpec.configure do |config| + config.use_transactional_fixtures = true +end</code></pre> + +What Combustion is doing is setting up a Rails application at @spec/internal@ - but you only need to add the files within that directory that you're going to use. Read on for some detail about what that involves. + +h3. Configuring which Rails modules should be loaded. + +By default, Combustion assumes you want the full Rails stack. You can customise this though - just pass in what you'd like loaded to the @Combustion.initialize!@ call: + +<pre><code>Combustion.initialize! :active_record, :action_controller, + :action_view, :sprockets</code></pre> + +ActiveSupport is always loaded, as it's an integral part of Rails. + +h3. Using Models and ActiveRecord + +If you're using ActiveRecord, then there's two critical files within your internal Rails app at @spec/internal@ that you'll need to create: + +* config/database.yml +* db/schema.rb + +Both follow the same structure as in any normal Rails application - and the schema file lets you avoid migrations, as it gets run whenever the test suite starts. Here's a quick sample (note that tables are overwritten if they already exist - this is necessary): + +<pre><code>ActiveRecord::Schema.define do + create_table(:pages, :force => true) do |t| + t.string :name + t.text :content + t.timestamps + end +end</code></pre> + +Any models that aren't provided by your engine should be located at @spec/internal/app/models@. + +h3. Using ActionController and ActionView + +You'll only need to add controllers and views to your internal Rails app for whatever you're testing that your engine doesn't provide - this may be nothing at all, so perhaps you don't even need @spec/internal/app/views@ or @spec/internal/app/controllers@ directories. + +However, if you're doing any testing of your engine's controllers or views, then you're going to need routes set up for them - so create a standard routes file at @spec/internal/config/routes.rb@: + +<pre><code>Rails.application.routes.draw do + resources :pages +end</code></pre> + +Just like in a standard Rails app, if you have a mounted engine, then its routes are accessible through whatever it has been loaded as. + +h3. Environment and Logging + +Your tests will execute within the test environment for the internal Rails app - and so logs are available at @spec/internal/log/test.log@. You should probably create that log directory so Rails doesn't complain. + +h3. Rack it up + +Once you've got this set up, you can fire up your test environment quite easily with Rack - here's an example @config.ru@ file that could live in the root of your engine folder: + +<pre><code>require 'rubygems' +require 'bundler' + +Bundler.require :default, :development + +Combustion.initialize! +run Combustion::Application</code></pre> + +h3. Get your test on! + +Now you're good to go - you can write specs within your engine's spec directory just like you were testing a full Rails application - models in @spec/models@, controllers in @spec/controllers@. If you bring Capybara into the mix, then the standard helpers helpers from that will be loaded as well. + +<pre><code>require 'spec_helper' + +describe Page do + describe '#valid' do + it 'requires a name' do + # This is just an example. Go write your own tests! + end + end +end</code></pre> + +h2. Compatibility + +Developed for Rails 3.1 and Ruby 1.9. It should work on any other Ruby, and possibly Rails 3.0, but will not work neatly with earlier versions of Rails. + +h2. Limitations and Known Issues + +Combustion is currently written with the expectation it'll be used with RSpec. I'd love to make this more flexible - if you want to give it a shot before I get around to it, patches are very much welcome. + +I'm also keen to have a generator that adds the standard set of files and folders (@config/database.yml@, @config/routes.rb@, @db/schema.rb@, @log@) into @spec/internal@, just to make it even easier to get going. Again, patches are welcome for this, but I'll likely get to it pretty soon. + +I've not tried using this with Cucumber, but it should work in theory without too much hassle. Let me know if I'm wrong! + +h2. Contributing + +Contributions are very much welcome - but keep in mind the following: + +* Keep patches in a separate branch +* Don't mess with the version or history file. I'll take care of that when the patch is merged in. +* Write tests - look at the existing tests (particularly in @spec/acceptance@) + +There are no tests - partly because Combustion was extracted out from the tests of HyperTiny's Dobro, and partly because there's not much code. Still, if you can find a clean way of testing this, that'd be fantastic. + h2. Credits -Combustion is developed and maintained by Pat Allan, and is released under the open MIT Licence. +Copyright (c) 2011, Combustion is developed and maintained by Pat Allan, and is released under the open MIT Licence. Many thanks to HyperTiny for encouraging its development.