2015-01-31 3 views
0

저는 초대 이메일이 생성되는 곳에서 통합/기능 테스트를 만들고 있습니다. rspec 테스트에서 링크를 잡아서 다운 스트림 테스트를 수행 할 수 있기를 원합니다. 여기ActionMailer에서 다운 스트림 rspec 테스트를위한 링크를 얻으려면 어떻게해야합니까?

내가 이메일 잡아 방법입니다

last_delivery = ActionMailer::Base.deliveries.last 

을 다음과 같이 신체가 나타납니다

puts last_delivery.body 

----==_mimepart_54cc1b76a8d12_d673ffe1c74c22869b6 
Content-Type: text/html; 
charset=UTF-8 
Content-Transfer-Encoding: 7bit 

<html> 
    <body> 
    <!DOCTYPE html> 
<html> 
    <head> 
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
    </head> 
    <body> 
    <h1>You have a pending invite!</h1> 
    <p>To join, please follow the link below and login or signup.</p> 
    <a href="http://localhost:3000/invite/13">Your Invite</a> 
    </body> 
</html> 
    </body> 
</html> 

----==_mimepart_54cc1b76a8d12_d673ffe1c74c22869b6-- 

아마 테스트 실행 사이에 변경됩니다 초대의 ID, 그래서 가능 내가 따라야 할 링크를 어떻게 추출 할 수 있습니까?

답변

2

해당 링크의 URL을 구문 분석 Nokogiri를 사용하여 시도해 볼 수도 있습니다 : 왜 그냥 초대를 전송하는 기능을 가지고 통해 가입하는 사용자를 시뮬레이션하는 또 다른 초대 오히려이 방법보다 더

doc = Nokogiri::HTML.parse(last_delivery.body) 
url = doc.css("a").map { |link| link[:href] }.first 

을 링크?

feature "User sends invite" do 
    scenario "to a valid email address" do 
    # ... 
    expect(page).to have_content "Your invite was sent to [email protected]" 
    end 
end 

feature "Invitee signs up" do 
    scenario "by accessing an invite link" do 
    invite = Invite.create 
    visit invite_path(invite) 
    # ... 
    end 
end 
+0

여기 Nokogiri를 사용하지 않았다면 작동 할 것입니다. 하지만 다른 기능 테스트로 분리하기 위해 조언을 사용하면 단순화 할 수있을 때 긴 문자열로 기능을 작성하는 습관이 있습니다. 감사. – yamori