rspec / capybara: как имитировать входящие POST-запросы?(рэк-тест не сработает) - PullRequest
4 голосов
/ 22 августа 2011

Мне нужно получать входящие электронные письма в виде multipart-formdata через 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 ]

12 голосов
/ 01 сентября 2011

Итак, я закончил тем, что сделал:

@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

, кажется, сейчас выполняет свою работу

0 голосов
/ 28 сентября 2012

Я видел этот ответ вчера вечером, когда обновлял свой собственный тестовый код для 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

Надеюсь, это очистит ваши собственные тесты.И для всех, кто заинтересован в тестировании почтового драгоценного камня, документация Майкла прошла долгий путь для того же:

https://github.com/mikel/mail

0 голосов
/ 23 августа 2011

Простой способ, вероятно, выполнить скрипт на капибаре.Просто убедитесь, что с тегом @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 Метод капибары тоже, но я не слишком уверен в том, как это работает. Возможно, стоит разобраться.

...