rspec/capybara: как имитировать входящие POST-запросы? (рэк-тест не сработает)
Мне нужно получать входящие письма в виде составных данных через POST-запрос от Cloudmailin. POST напоминает следующее:
Parameters: {"to"=>"<email@exmaple.comt>", "from"=>"whomever@example", "subject"=>"my awesome subject line....
На самом деле, получать и анализировать электронные письма очень просто, потому что электронное письмо просто публикуется в виде params: params[:to], params[:from] и т. Д. Однако, как мне смоделировать этот запрос POST в рельсах?
Я создал приложение-заглушку для тестирования Cloudmailin, поэтому у меня есть актуальный запрос. Однако это 6-символьный файл, поэтому я хотел бы загрузить этот файл в качестве параметров запроса POST. Я пытался использовать встроенные рельсы post и post_via_redirect для загрузки файла, но он экранирует все параметры ( \"to\"), что не очень хорошо. Есть идеи?
3 ответа
Итак, я закончил делать:
@parameters = { "x_to_header"=>"<#{ @detail.info }>",
"to"=>"<#{ @account.slug }@cloudmailin.net>",
"from"=>"#{ @member.email }",
"subject"=>"meeting on Monday",
"plain"=>"here is my message\nand this is a new line\n\n\nand two new lines\n\n\n\nand a third new line"
}
тогда просто:
post "/where_ever", @parameters
кажется, на данный момент работа сделана
Простой способ, вероятно, выполнить скрипт на капибаре. Просто убедитесь, что с @javascript
тег, а затем загрузить любую страницу в вашем приложении, на котором установлен jQuery (технически это вам не нужно, но это гораздо проще. Тогда:
When /^I get a post request from Cloudmailin$/ do
visit '/some/page/with/jquery'
page.execute_script(%{$.post("/some/path?to=some_email&etc=etc");})
end
Там простое post
Метод капибара тоже, но я не слишком уверен, как это работает. Может быть стоит посмотреть.
Я видел этот ответ вчера вечером, когда обновлял свой собственный тестовый код для Rails 3.2.8, в котором используется гем Mail, и решил поделиться тем, что нашел. Тестовый код предназначен для приложения, которому необходимо взять POST от Cloudmailin, а затем обработать его, чтобы создать нового пользователя с помощью Devise, а затем отправить этому пользователю подтверждение, после чего пользователь может следовать, чтобы выбрать пароль. Вот моя спецификация контроллера:
require 'spec_helper'
describe ThankyouByEmailController do
message1 = Mail.new do
from "Frommy McFromerton <frommy.mcfrommerton@gmail.com>"
to "toey.receivesalot@gmail.com"
subject "cloudmailin test"
body 'something'
text_part do
body 'Here is the attachment you wanted'
end
html_part do
content_type 'text/html; charset=UTF-8'
body '<h1>Funky Title</h1><p>Here is the attachment you wanted</p>'
end
end
describe "creating new users" do
describe "unregistered FROM sender and Unregistered TO receiver" do
it "should create 2 new users" do
lambda do
post :create, :message => "#{@message1}"
end.should change(User, :count).by(2)
end
end
end
end
Надеюсь, это очистит ваши собственные тесты. И для всех, кто заинтересован в тестировании почтового драгоценного камня, документация Майкла прошла долгий путь для того же: