2016-12-11 9 views
-1

Я создал сайт просмотра фильмов, который позволяет зарегистрированному пользователю добавлять, редактировать и удалять фильм, а также оставлять обзоры для каждого фильма. Я также внедрил почтовую программу для моей контактной формы, которая отправляет «фальшивый адрес электронной почты» (отображается только на консоли).Проверка почты/контакта

Это мой первый опыт работы с Ruby, поэтому я не уверен, как тестировать мой контроллер и метод для контактов. Любые формы совета будут высоко оценены.

contacts_controller.rb:

class ContactsController < ApplicationController 
def new 
@contact = Contact.new 
end 

def create 
@contact = Contact.new(params[:contact]) 
@contact.request = request 

if @contact.deliver 
    flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
    else 
    flash.now[:error] = 'Cannot send message.' 
    render :new 

    end 
end 
end 

contact.rb:

class Contact < MailForm::Base 
    attribute :name,  :validate => true 
    attribute :email,  :validate => /\A([\w\.%\+\-]+)@([\w\-]+\. 
    attribute :message 
    attribute :nickname, :captcha => true 

# Declare the e-mail headers. It accepts anything the mail method 
# in ActionMailer accepts. 
def headers 
    { 
    :subject => "My Contact Form", 
    :to => "[email protected]", 
    :from => %("#{name}" <#{email}>) 
    } 
    end 
end 

маршруты:

contacts GET /contacts(.:format)  contacts#new  
      POST /contacts(.:format)  contacts#create 
new_contact GET /contacts/new(.:format) contacts#new 

Мои испытания до сих пор:

require 'test_helper' 

class ContactsControllerTest < ActionController::TestCase 
include Devise::Test::ControllerHelpers 

test "should get contact" do 
get :new 
assert_response :success 

end 
end 

ответ

0

Вы можете прочитать более подробную информацию здесь http://edgeguides.rubyonrails.org/testing.html#testing-your-mailers

require 'test_helper' 

class ContactsControllerTest < ActionDispatch::IntegrationTest 
    test "ActionMailer is increased by 1" do 
    assert_difference 'ActionMailer::Base.deliveries.size', +1 do 
     post contacts_url, params: { name: 'jack bites', email: '[email protected]', message: 'sending message', nickname: 'jackbites' } 
    end 
    end 

    test "Email is sent to correct address" do 
    post contacts_url, params: { name: 'jack bites', email: '[email protected]', message: 'sending message', nickname: 'jackbites' } 
    invite_email = ActionMailer::Base.deliveries.last 
    assert_equal '[email protected]', invite_email.to[0] 
    end 
end 
+0

Спасибо за обмен ссылку. Используя эту ссылку, я пытался понять, но я до сих пор не знаю, как применять эти принципы для моего тестирования. – sar

+0

Посмотрите на '10.3 Functional Testing', чтобы протестировать ваш контроллер. Пожалуйста, дайте мне знать, если у вас есть вопрос. – JackBites

+0

Основываясь на 10.3 я придумал следующий тест: тест "отправить электронную почту" сделать assert_difference 'ActionMailer :: Base.deliveries.size', +1 сделать пост send_email_url, Params: {эл.адрес: «Информация @ MyMovies .com»} конец send_email = ActionMailer :: Base.deliveries.last конец Не могли бы вы, пожалуйста, руководство меня, если я на правильном пути, и здесь я совершенно запутался. – sar