Ruby on rails 已接收电子邮件的验证错误被卡住

Ruby on rails 已接收电子邮件的验证错误被卡住,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我正在跟踪railscast 275,测试忘记我的密码。我在通过邮件时遇到了问题,邮件已经出错了。按照教程中的编码,我可能会收到这个错误,“没有标题或文本“password”链接的错误”。相反,我得到的是,“验证失败:电子邮件已被接收(ActiveRecord::RecordInvalid)” 我已经搜索过了,无法找到解决方案 下面是密码\u resets\u spec.rb: require 'spec_helper' describe "PasswordResets" do it "e

我正在跟踪railscast 275,测试忘记我的密码。我在通过邮件时遇到了问题,邮件已经出错了。按照教程中的编码,我可能会收到这个错误,“没有标题或文本“password”链接的错误”。相反,我得到的是,“验证失败:电子邮件已被接收(ActiveRecord::RecordInvalid)”

我已经搜索过了,无法找到解决方案

下面是密码\u resets\u spec.rb:

require 'spec_helper'

describe "PasswordResets" do
  it "emails user when requesting password reset"
    user = FactoryGirl.create(:user)
    visit login_path
    click_link "password"
    fill_in "Email", :with => user.email
    click_button "Reset Password"
  end
factories.rb:

FactoryGirl.define do
  factory :user do
    sequence :email do |n| "test#{n}@example.com"
    end
    password "secret"
  end
end

工厂的定义似乎还可以


在运行规范之前,我将首先确保您的测试数据库为空。可能存在现有用户记录“test1@example.com“挥之不去。另外,您是否尝试只运行该示例?这有什么区别吗?

看起来,在运行测试用例时,创建的工厂没有回滚/删除记录

在(:each)之前添加
在执行示例之前删除以前的记录

before(:each) do
User.delete_all
end

以下是我最后注意到它开始工作时所做的。我安装了数据库清理器。然后我做了命令:

rake数据库:重置 rake数据库:迁移 rake数据库:测试:准备

之后,我注意到在请求密码重置时,我不得不在“it”电子邮件用户的末尾添加一个“do”


现在我没有任何错误,我可以继续我的测试冒险。感谢那些试图提供帮助的人。

这只会产生“未定义的局部变量或方法`login\u path'(NameError)”,我可以通过使用“visit”/sessions/login”#login\u path来修复它“。因此,它仍然返回到已接收电子邮件的原始错误。@pwz2000:我已更新解决方案,并使用
before(:each)
callback未定义的main:Object方法'before'(NoMethodError)将其删除。我一定是做错了什么事。每次回电话之前,你是怎么安排的?这就是它的定义方式,我运行了rake db:test:prepare,但它仍然没有改变错误。您是否仅运行该示例?将
User.count.should_zero
添加为规范的第一行时会发生什么情况?使用test1会产生相同的错误。添加user.count会产生“未定义的局部变量或方法'be_zero'”,这很奇怪;be_zero是一个有效的匹配器。您是否可以尝试
User.count.should==0
?'fail_with':预期值:0(RSpec::Expectations::ExpectationNotMetError)