Skip to content

Trying to test your gems in the context of a test Rails application is hard. This gem makes it easy.

License

Notifications You must be signed in to change notification settings

rubiety/cukigem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cukigem

Testing Rails gem plugins using cucumber can be difficult since gems need to be tested in the context of a host Rails application, which isn’t part of your gem. Cukigem gives you cucumber steps to make testing your gem in the context of a Rails application easy.

This is a nice addition to gems as it’s more of an integration test - verifying that your gem actually works and is successfully-installed in a Rails application via the Gemfile.

This is not a gem but a collection of useful steps. Simply copy the step definition files located in step_definitions, and the support files located in support, into your own project.

Examples

See this example in use on my message_block project. All of the step definitions should be self-explanatory if you read the step_definitions/cukigem_steps.rb file.

Feature: Message Block
  Scenario: Installing Static Files
    Given I have a rails application
    And I run "rake message_block:install --trace"
    Then the file "public/images/message_block" should exist
    And the file "public/stylesheets/message_block.css" should exist
    And the file "public/javascripts/message_block.js" should exist

  Scenario: Displaying Model Errors mixed with Flash Messages
    Given I have a rails application
    And I run "rails g scaffold model name:string"
    And I setup the database
    And I save the following as "app/controllers/models_controller.rb":
    """
    class ModelsController < ApplicationController
      def index
        @model = Model.new
        @model.errors.add(:base, "Model-One")
        @model.errors.add(:base, "Model-Two")

        flash.now[:error] = "Controller-One"
        flash.now[:confirm] = "Controller-Two"
      end
    end
    """
    And I save the following as "app/views/models/index.html.erb":
    """
    <%= message_block :on => :model %>
    """
    And I start the rails application
    When I go to the models page
    Then I should see "Model-One"
    And I should see "Model-Two"
    And I should see "Controller-One"
    And I should see "Controller-Two"

Known Issues

  • Be careful when using multiple “generate a rails application” steps in one test run. The problem is that we can only require the config/environment.rb file once, so if you blow away and generate a new application in the course of the test run, things will not behave as expected. Cukigem does a lot to “reset” your app to a blank state so there should rarely be a need to fully generate a new application except if one doesn’t already exist.

Contributions

I am really looking for contributions here. I created this after looking for a standard way of testing my gems using cucumber and I was unable to find anything (except for some nice code in the paperclip project which did most of what I needed). Patches/pull-requests welcome.

Credits

Thanks to Jon Yurek of Thoughtbot for getting me thinking about this after seeing his work on Rails app generation and cucumber within the paperclip project.

About

Trying to test your gems in the context of a test Rails application is hard. This gem makes it easy.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages