未定义的局部变量或方法“ last_email”

弗洛·拉尔(Flo Rahl)

我正在关注Ryan Bates#275 Railscasts,但是由于该last_email方法,我无法通过测试

这是测试:spec / requests / password_resets_spec.rb

require 'spec_helper'

subject { page }

describe "Password reset for a registered user" do

  let(:user) { FactoryGirl.create(:user) }  
  before do
    visit new_password_reset_path
    fill_in t('user.email'), with: user.email
    click_button(t('submit.reset.password'))
  end

  it { should have_selector('div.alert.alert-success', t('flash.success.reset_password.sent')) }
  expect(last_email).to have_content(user.email)
end

这是错误消息:

spec/requests/password_resets_spec.rb:19:in `block (2 levels) in <top (required)>': undefined local variable or method `last_email' for #<Class:0x000000063b18d8> (NameError

这是new_password_reset视图:

<%= form_tag password_resets_path, :method => :post do %>
  <div class="field">
    <%= label_tag :email, t('user.email') %>
    <%= text_field_tag :email, params[:email] %>
  </div>
  <%= submit_tag t('submit.reset.password'), class: "btn btn-primary" %>
<% end %>

new_password_reset控制器create方法:

def create 
  user = User.find_by_email(params[:email])
  user.send_password_reset if user
  flash[:success] = t('flash.success.reset_password.sent')
  redirect_to root_url
end 

就像在railscast中一样,我执行了以下操作:

spec / spec_helper.rb

require 'capybara/rspec'

RSpec.configure do |config|
  # ...
  config.include(MailerMacros)
  config.before(:each) { reset_email }
end

规范/支持/mailer_macros.rb

module MailerMacros
  def last_email
    ActionMailer::Base.deliveries.last
  end

  def reset_email
    ActionMailer::Base.deliveries = []
  end
end
贝贾明·理查兹(Betjamin Richards)

这是因为您是last_email在类级别而不是块内调用该方法。

您需要expect(last_email).to have_content(user.email)用一个it来定义,

it "should show alert and dispatch email to the user" do
   page.should have_selector('div.alert.alert-success', t('flash.success.reset_password.sent'))
   expect(last_email).to have_content(user.email)
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章