Trouble-with-capybara-and-rspec-on-a-new-model-spec

I have searched a lot for a solution, but I could not find it! I am
trying
to make a rails application after watching Michael H.'s tutorial and
when i fill data manually and submit it nothing happens and nothing
records
in the Mailers table and I am facing the following error:

Failures:

  1. Mailer pages mail us with valid information should send a mail
    Failure/Error: expect { click_button submit}.to change(Mailer,
    :count).by(1)
    count should have been changed by 1, but was changed by 0

    ./spec/requests/mailer_pages_spec.rb:31:in `block (4 levels) in

<top (required)>’
Finished in 0.89134 seconds2 examples, 1 failure
Failed examples:

rspec ./spec/requests/mailer_pages_spec.rb:30 # Mailer pages mail us
with valid information should send a mail
Randomized with seed 17352

The model file is:

class Mailer < ActiveRecord::Base
attr_accessible :company_name, :contact_name, :address, :telephone,
:email, :description
before_save { |mailer| mailer.email = mailer.email.downcase }
validates :company_name, length: { maximum: 50 }
validates :contact_name, presence: true, length: { maximum: 40 }
VALID_EMAIL_REGEX = /\A[\w+-.]+@[a-z\d-.]+.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX
}end

Controller:

class MailersController < ApplicationController

def new
@mailer = Mailer.new
end

def create
@mailer = Mailer.new(params[:mailer])
if @mailer.save
redirect_to root_path
else
render ‘new’
end
endend

Integration test:

require ‘spec_helper’

describe “Mailer pages” do

subject { page }

describe “mail us” do

 let(:submit) { "Send my Mail"}
 before { visit mailers_path }


 describe "with invalid information" do
   it "should not send a mail" do
     expect { click_button submit }.not_to change(Mailer, :count)
     end
 end

 describe "with valid information" do
   before do
     fill_in "Company name", with: "Mailer Company"
     fill_in "Contact name", with: "Mailer Contact"
     fill_in "Address",      with: "Mailer Address"
     fill_in "Telephone",    with: "123-456-789"
     fill_in "Email",        with: "[email protected]"
     fill_in "Description",  with: "something to say"
   end

   it "should send a mail" do
     expect { click_button submit}.to change(Mailer, :count).by(1)
   end
 end

end
end

And the form:

<% provide(:title , ‘Mail Us’) %>

Mail Us



<%= form_for(@mailer) do |f| %>
<%= f.label :company_name %>
<%= f.text_field :company_name %>
<%= f.label :contact_name %>
<%= f.text_field :contact_name %>

<%= f.label :address %>
<%= f.text_field :address %>

<%= f.label :telephone %>
<%= f.text_field :telephone %>

<%= f.label :email %>
<%= f.text_field :email %>

<%= f.label :description %>
<%= f.text_field :description %>

<%= f.submit "Send my Mail", class: "btn btn-large btn-primary"%><% 

end %>

From the code you’ve posted, It seems everything is ok and should work.
I
suggest you do some debugging, try using the better_errors gem, it’ll
give
you more informative errors. Run your rspec test using the -e flag to
specify each individual test, through process of elimination you can
probably get more traction. Also check your routes to make sure there
are
no syntax errors