4

Cloudmailin의 POST 요청을 통해 multipart-formdata로 수신 이메일을 수신해야합니다. 실제로rspec/capybara : 들어오는 POST 요청을 시뮬레이트하는 방법은 무엇입니까? (랙 테스트가 작동하지 않습니다)

Parameters: {"to"=>"<[email protected]>", "from"=>"[email protected]", "subject"=>"my awesome subject line.... 

를 수신하고 분석하는 이메일 이메일 그냥 PARAMS로 게시되기 때문에 매우 간단하다 : PARAMS [님], PARAMS [:에서] 등 그러나, 어떻게 할 POST는 다음과 같은 레일에서 POST 요청을 시뮬레이트 하시겠습니까?

Cloudmailin을 테스트하기 위해 더미 레일 앱을 만들었으므로 실제 요청이 있습니다. 그러나 그것은 6k 문자 파일이므로이 파일을 POST 요청의 매개 변수로로드하고 싶습니다. 내장 레일 게시물과 post_via_redirect 메서드를 사용하여 파일을로드하려했지만 모든 매개 변수 (\ "to \")를 이스케이프 처리합니다. 어떤 아이디어?

+0

http://railscasts.com/episodes/276-testing-time-web-requests 특히 https://github.com/chrisk/fakeweb – rubish

+0

의견을 내 주셔서 감사합니다. 필자는 fakeweb이 외부 API에서 가져 오기를 테스트 할 수 있다고 생각합니다. 들어오는 요청을 테스트해야합니다. 사실, 그건 사실이 아니야. 컨트롤러에 일부 매개 변수를 게시하면 테스트의 나머지 부분에서 적절한 메일을 만들 수 있습니다. – GoodGets

+0

미안, 아마 내가 자야 해. :) – rubish

답변

12

그래서, 내가하고 결국 :.. 단지 다음

@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 

작업이 내가 레일 3.2.8에 대한 내 자신의 테스트 코드의 일부를 업데이트 할 때 나는 지난 밤이 답변을보고 지금

+0

청초하지만 단순한 아이디어처럼 들리는 사운드 – Vatsala

+0

이 기능은 다른 기능 (예 : 'get')과 함께 사용할 수 있습니까? – Jeff

0

간단한 방법은 아마도 capybara에서 스크립트를 실행하는 것입니다. 그냥 @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 카피 바라 방법있다 하지만 그 작동 방식에 대한 너무 잘 모르겠습니다을 조사 가치가있을 수도 있습니다

+0

감사합니다. 제안. 그러나, 나는 수동으로 매개 변수 해시를 작성한 다음 API 끝점을 게시합니다. post// incoming, @parameters (이제는 가능한 가장 간단한 해결책입니다) – GoodGets

+0

그래서 capybara의 post 메소드를 사용하고 있습니까? –

+0

그냥 얇은 레일일까요? – GoodGets

0

에 대한 끝내야하는 것, 그리고 이는 메일 보석을 사용하고, 내가 '생각 d는 내가 찾은 것을 나눈다. 테스트 코드는 Cloudmailin에서 POST를 취한 다음 Devise를 사용하여 새 사용자를 만든 다음 해당 사용자에게 확인 메시지를 보내서 사용자가 암호를 선택할 수 있도록해야합니다. 여기 내 컨트롤러 사양입니다 :

require 'spec_helper' 

describe ThankyouByEmailController do 

    message1 = Mail.new do 

    from "Frommy McFromerton <[email protected]>" 
    to "[email protected]" 
    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