ruby-on-rails – Capybara测试HTML电子邮件
发布时间:2020-12-17 02:29:30 所属栏目:百科 来源:网络整理
导读:我想使用Capybara来测试我的应用生成的 HTML电子邮件. 我目前正在使用email_spec gem,所以我已经将电子邮件的正文作为字符串,如果这有用的话. 我怎么能让Capybara加载电子邮件? 注意:我的最终目标是使用this fork的capybara-webkit将HTML电子邮件呈现为图
我想使用Capybara来测试我的应用生成的
HTML电子邮件.
我目前正在使用email_spec gem,所以我已经将电子邮件的正文作为字符串,如果这有用的话. 我怎么能让Capybara加载电子邮件? 注意:我的最终目标是使用this fork的capybara-webkit将HTML电子邮件呈现为图像. 解决方法
我不确定为什么你会得到水豚来测试电子邮件.我知道email_spec有能力:
>关注链接 当然,email_spec生成的黄瓜email_steps.rb提供了各种指针,向您展示如何直接使用email_spec级别的代码(即没有黄瓜)来实现上述目的. 直接来自email_steps.rb文件: # Commonly used email steps # # To add your own steps make a custom_email_steps.rb # The provided methods are: # # last_email_address # reset_mailer # open_last_email # visit_in_email # unread_emails_for # mailbox_for # current_email # open_email # read_emails_for # find_email # # General form for email scenarios are: # - clear the email queue (done automatically by email_spec) # - execute steps that sends an email # - check the user received an/no/[0-9] emails # - open the email # - inspect the email contents # - interact with the email (e.g. click links) # # The Cucumber steps below are setup in this order. module EmailHelpers def current_email_address # Replace with your a way to find your current email. e.g @current_user.email # last_email_address will return the last email address used by email spec to find an email. # Note that last_email_address will be reset after each Scenario. last_email_address || "example@example.com" end end World(EmailHelpers) # # Reset the e-mail queue within a scenario. # This is done automatically before each scenario. # Given /^(?:a clear email queue|no emails have been sent)$/ do reset_mailer end # # Check how many emails have been sent/received # Then /^(?:I|they|"([^"]*?)") should receive (an|no|d+) emails?$/ do |address,amount| unread_emails_for(address).size.should == parse_email_count(amount) end Then /^(?:I|they|"([^"]*?)") should have (an|no|d+) emails?$/ do |address,amount| mailbox_for(address).size.should == parse_email_count(amount) end Then /^(?:I|they|"([^"]*?)") should receive (an|no|d+) emails? with subject "([^"]*?)"$/ do |address,amount,subject| unread_emails_for(address).select { |m| m.subject =~ Regexp.new(subject) }.size.should == parse_email_count(amount) end Then /^(?:I|they|"([^"]*?)") should receive an email with the following body:$/ do |address,expected_body| open_email(address,:with_text => expected_body) end # # Accessing emails # # Opens the most recently received email When /^(?:I|they|"([^"]*?)") opens? the email$/ do |address| open_email(address) end When /^(?:I|they|"([^"]*?)") opens? the email with subject "([^"]*?)"$/ do |address,subject| open_email(address,:with_subject => subject) end When /^(?:I|they|"([^"]*?)") opens? the email with text "([^"]*?)"$/ do |address,text| open_email(address,:with_text => text) end # # Inspect the Email Contents # Then /^(?:I|they) should see "([^"]*?)" in the email subject$/ do |text| current_email.should have_subject(text) end Then /^(?:I|they) should see /([^"]*?)/ in the email subject$/ do |text| current_email.should have_subject(Regexp.new(text)) end Then /^(?:I|they) should see "([^"]*?)" in the email body$/ do |text| current_email.default_part_body.to_s.should include(text) end Then /^(?:I|they) should see /([^"]*?)/ in the email body$/ do |text| current_email.default_part_body.to_s.should =~ Regexp.new(text) end Then /^(?:I|they) should see the email delivered from "([^"]*?)"$/ do |text| current_email.should be_delivered_from(text) end Then /^(?:I|they) should see "([^"]*)" in the email "([^"]*?)" header$/ do |text,name| current_email.should have_header(name,text) end Then /^(?:I|they) should see /([^"]*)/ in the email "([^"]*?)" header$/ do |text,Regexp.new(text)) end Then /^I should see it is a multi-part email$/ do current_email.should be_multipart end Then /^(?:I|they) should see "([^"]*?)" in the email html part body$/ do |text| current_email.html_part.body.to_s.should include(text) end Then /^(?:I|they) should see "([^"]*?)" in the email text part body$/ do |text| current_email.text_part.body.to_s.should include(text) end # # Inspect the Email Attachments # Then /^(?:I|they) should see (an|no|d+) attachments? with the email$/ do |amount| current_email_attachments.size.should == parse_email_count(amount) end Then /^there should be (an|no|d+) attachments? named "([^"]*?)"$/ do |amount,filename| current_email_attachments.select { |a| a.filename == filename }.size.should == parse_email_count(amount) end Then /^attachment (d+) should be named "([^"]*?)"$/ do |index,filename| current_email_attachments[(index.to_i - 1)].filename.should == filename end Then /^there should be (an|no|d+) attachments? of type "([^"]*?)"$/ do |amount,content_type| current_email_attachments.select { |a| a.content_type.include?(content_type) }.size.should == parse_email_count(amount) end Then /^attachment (d+) should be of type "([^"]*?)"$/ do |index,content_type| current_email_attachments[(index.to_i - 1)].content_type.should include(content_type) end Then /^all attachments should not be blank$/ do current_email_attachments.each do |attachment| attachment.read.size.should_not == 0 end end Then /^show me a list of email attachments$/ do EmailSpec::EmailViewer::save_and_open_email_attachments_list(current_email) end # # Interact with Email Contents # When /^(?:I|they) follow "([^"]*?)" in the email$/ do |link| visit_in_email(link) end When /^(?:I|they) click the first link in the email$/ do click_first_link_in_email end # # Debugging # These only work with Rails and OSx ATM since EmailViewer uses RAILS_ROOT and OSx's 'open' command. # Patches accepted. ;) # Then /^save and open current email$/ do EmailSpec::EmailViewer::save_and_open_email(current_email) end Then /^save and open all text emails$/ do EmailSpec::EmailViewer::save_and_open_all_text_emails end Then /^save and open all html emails$/ do EmailSpec::EmailViewer::save_and_open_all_html_emails end Then /^save and open all raw emails$/ do EmailSpec::EmailViewer::save_and_open_all_raw_emails end 假设您可以调用规范中的各种方法,例如: open_email(address,:with_text => 'mytext') current_email.default_part_body.to_s.should include(text) visit_in_email(link) EmailSpec::EmailViewer::save_and_open_email(current_email) 然后,您可以模拟打开电子邮件地址,查看电子邮件内容并访问电子邮件中的链接,甚至保存电子邮件,以便您可以在Safari或其他浏览器中查看. Capybara会给你带来什么? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |