Skip to content

Collection of rspec matchers which will be converted to custom matchers for Test::Unit and cucumber steps for testing email in a rails app

License

Notifications You must be signed in to change notification settings

basiszwo/email-spec

 
 

Repository files navigation

Email Spec (somewhen Email Test)

A collection of (RSpec) Test::Unit matchers and Cucumber steps to make testing emails go smoothly.

Setup

script/plugin install git://github.com/bmabey/email-spec.git

Requirements

jnunemaker-matchy for having the ability to create custom matchers and use some shipped matchers like should in Test::Unit

Gem Setup

gem install basiszwo-email_spec

# config/environments/test.rb
config.gem 'basiszwo-email_spec', :lib => 'email_spec'

Cucumber

To use the steps in features put the following in your env.rb:

# Make sure this require is after you require cucumber/rails/world.
require 'email_spec/cucumber'

This will load all the helpers that the steps rely on. It will also add a Before hook for Cucumber so that emails are cleared at the start of each scenario.

Then:

script/generate email_spec

This will give you a bunch of steps to get started with in step_definitions/email_steps.rb

RSpec

First you need to require the helpers and matchers in your spec_helper.rb like so:

require "email_spec/helpers"
require "email_spec/matchers"

You will then need to include EmailSpec::Helpers and EmailSpec::Matchers in your example groups.
If you want to have access to the helpers and matchers in all of your examples you can do the following in your spec_helper.rb:

Spec::Runner.configure do |config|
  config.include(EmailSpec::Helpers)
  config.include(EmailSpec::Matchers)
end

Otherwise, you will need to include them in the example groups you wish to use them:

describe "Signup Email" do
  include EmailSpec::Helpers
  include EmailSpec::Matchers
  ...
end

Usage

Cucumber

Scenario: A new person signs up
    Given I am at "/"
    When I fill in "Email" with "[email protected]"
    And I press "Sign up"
    And I should receive an email
    When I open the email
    Then I should see "confirm" in the email
    When I follow "confirm" in the email
    Then I should see "Confirm your new account"

For more examples, check out examples/rails_root in the source for a small example app that implements these steps.

RSpec

==== Testing In Isolation ====
  It is often useful to test your mailers in isolation.  You can accomplish this by using mocks to verify that the mailer is being called in the correct place and then write focued examples for the actual mailer.  This is a simple example from the sample app found in the gem:

  Verify that the mailer is used correctly in the controller (this would apply to a model as well):

   describe "POST /signup (#signup)" do
      it "should deliver the signup email" do
        # expect
        UserMailer.should_receive(:deliver_signup).with("[email protected]", "Jimmy Bean")
        # when
        post :signup, "Email" => "[email protected]", "Name" => "Jimmy Bean"
      end
    end

  Examples for the #signup method in UserMailer:

  describe "Signup Email" do
    include EmailSpec::Helpers
    include EmailSpec::Matchers
    include ActionController::UrlWriter

    before(:all) do
      @email = UserMailer.create_signup("[email protected]", "Jojo Binks")
    end

    it "should be set to be delivered to the email passed in" do
      @email.should deliver_to("[email protected]")
    end

    it "should contain the user's message in the mail body" do
      @email.should have_text(/Jojo Binks/)
    end

    it "should contain a link to the confirmation link" do
      @email.should have_text(/#{confirm_account_url}/)
    end

    it "should have the correct subject" do
      @email.should have_subject(/Account confirmation/)
    end

  end

  ==== Using the helpers when not testing in isolation ==== 

    Don't. :)  Seriously, if you do just take a look at the helpers and use them as you wish.

Author

Stefan Botzenhart

Original Authors

Ben Mabey, Aaron Gibralter, Mischa Fierer

Please see History.txt for upcoming changsets and other contributors.

About

Collection of rspec matchers which will be converted to custom matchers for Test::Unit and cucumber steps for testing email in a rails app

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 99.7%
  • JavaScript 0.3%