2016-10-19 3 views
0

Я использую MailForm Gem , чтобы создать контактную форму для моего приложения, и все, кажется, работает очень хорошо, поэтому я решил написать несколько тестов, чтобы убедиться, что это так.Rails MailForm Gem captcha валидация не проходит тест

class ContactsControllerTest < ActionDispatch::IntegrationTest 
    def setup 
    ActionMailer::Base.deliveries.clear 
    end 

    test "should send contact email" do 
    get contact_path 
    post contacts_path, params: { contact: { 
       name: "interested customer", 
       email: "[email protected]", 
       subject: "we are interested!", 
       message: "we are so interested!!!" 
    }} 
    assert_equal 1, ActionMailer::Base.deliveries.size 
    assert_redirected_to root_path 
    end 

    test "should not send invalid contact email" do 
    get contact_path 
    post contacts_path, params: { contact: { 
       name: "", 
       email: "", 
       subject: "", 
       message: "" 
    }} 
    assert_equal 0, ActionMailer::Base.deliveries.size 
    assert_template 'contacts/new' 

    end 

    test "should not send contact email with captcha filled" do 
    get contact_path 
    post contacts_path, params: { contact: { 
       name: "interested customer", 
       email: "[email protected]", 
       subject: "we are interested!", 
       message: "we are so interested!!!", 
       nickname: "not_blank" 
    }} 
    assert_equal 0, ActionMailer::Base.deliveries.size 
    assert_template 'contacts/new' 
    end 

первые два испытания проходят в то время как третий сбой с сообщением

FAIL["test_should_not_send_contact_email_with_captcha_filled", ContactsControllerTest, 5.2574800989968935] 
    test_should_not_send_contact_email_with_captcha_filled#ContactsControllerTest (5.26s) 
    Expected: 0 
     Actual: 1 
    test/controllers/contacts_controller_test.rb:35:in `block in <class:ContactsControllerTest>' 

Моя модель выглядит следующим образом.

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

    def headers 
    { 
     :subject => "Contact: #{subject}" , 
     :to => "[email protected]", 
     :from => %("#{name}" <#{email}>) 
    } 
    end 
end 

Моя первая мысль заключалась в том, что проверка captcha не останавливает отправку почты. Если бы кто-то мог указать, чего я не хватает, я был бы признателен.

ответ

0

Модель электронной почты возвращает действительный, даже если указан псевдоним. Но вы можете проверить, является ли это спамом, который запрещает отправку почты. Я использую это, чтобы проверить, работает ли обнаружение спама (с rspec):

it 'should be marked spam if it contains :nickname' do 
expect(FactoryGirl.build(:contact_with_nickname)).to be_spam 
end