2016-12-11 3 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

여기

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

http://edgeguides.rubyonrails.org/testing.html#testing-your-mailers 링크를 공유 주셔서 감사합니다 자세한 내용을 읽을 수 있습니다. 이 링크를 사용하여 이해하려고 시도했지만 필자는 테스트를 위해 이러한 원칙을 적용하는 방법을 여전히 잘 모르고 있습니다. – sar

+0

컨트롤러에서 테스트하기 위해'10.3 Functional Testing'을 찾으십시오. 질문이 있으면 알려주십시오. 하나는 포스트 send_email_url, PARAMS을 테스트, assert_difference 'ActionMailer :: Base.deliveries.size을'할 '이메일을 보내 ": mymovies @'정보 : {이메일을 – JackBites

+0

는 10.3을 기반으로 I는 다음의 시험에 올라와있다 .COM '} 끝 의 send_email = ActionMailer :: Base.deliveries.last 끝 내가 곧 정상 궤도에있어 경우에 나는 완전히 혼란 스러워요 당신이 여기에 나를 인도 시겠어요. – sar