Ruby on Rails Thursday, May 2, 2013

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

On Wednesday, May 1, 2013 8:32:44 PM UTC-4, Mostafa Hussein wrote:

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 Hartl'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 seconds  2 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    end  end

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: "mai...@example.com"           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') %>  <h1>Mail Us</h1>  <div class="row">      <div class="span6 offset3 hero-unit">    <%= 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 %>  </div>  </div>

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/bBlaofccZjMJ.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment