2013-03-05 62 views
0

我下面railscast#275测试我忘了密码。我遇到麻烦,通过电子邮件已被采取错误。有了编码,我按照教程我想接收这个错误,“错误没有链接与标题或文本”密码“。相反,这就是我所得到的,”验证失败:电子邮件已被采取(ActiveRecord: :RecordInvalid)”停留在电子邮件的验证错误已经采取

我已经做了搜索,无法找到它的解决方案

这里的password_resets_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 

回答

2

这里就是我做的时候,我终于发现它开始工作之前。我安装了数据库清理。然后我做了命令:

耙分贝:重置 耙分贝:迁移 耙分贝:测试:准备

此之后我发现我不得不添加一个“做”给“”电子邮件结束。用户在请求密码重置”

现在我没有错误,我可以在我的测试冒险继续感谢那些谁试图帮助

0

工厂定义似乎确定。

我会通过确保您的测试数据库是运行规范前空开始。可能存在现有的用户记录“[email protected]”徘徊。另外,你是否试图只运行这个例子?它有什么区别?

+0

我跑耙分贝:。测试:准备和它依旧不改错误 – pwz2000 2013-03-05 18:47:34

+0

你是否只运行那个例子?当你添加'User.count.should be_zero'as会发生什么你的规格的第一行? – boulder 2013-03-05 19:02:03

+0

使用test1会产生相同的错误。添加user.count产生“未定义的局部变量或方法'be_zero'” – pwz2000 2013-03-05 19:21:25

0

貌似在运行测试用例时创建没有回滚工厂/删除的记录。

添加before(:each)删除先前记录的示例执行

before(:each) do 
User.delete_all 
end 
+0

这只是为#(NameError)产生”未定义的局部变量或方法'login_path“ – pwz2000 2013-03-05 18:22:40

+0

我可以通过使用”访问“/sessions/login“#login_path”。因此,它仍然会回到原来的电子邮件的原始错误。 – pwz2000 2013-03-05 18:42:05

+0

@ pwz2000:我已经更新了解决方案并使用'before(:each)'回调 – AnkitG 2013-03-05 19:50:14