Ruby on rails RSPEC以电子邮件格式失败

Ruby on rails RSPEC以电子邮件格式失败,ruby-on-rails,rspec,Ruby On Rails,Rspec,我一直在浏览Rails教程,为我正在进行的项目整合用户帐户并对其运行测试 Failures: 1) when email format is invalid should be invalid Failure/Error: @user.email = invalid_address NoMethodError: undefined method `email=' for nil:NilClass # ./spec/models/user_spec

我一直在浏览Rails教程,为我正在进行的项目整合用户帐户并对其运行测试

Failures:

  1) when email format is invalid should be invalid
     Failure/Error: @user.email = invalid_address
     NoMethodError:
       undefined method `email=' for nil:NilClass
     # ./spec/models/user_spec.rb:71:in `block (3 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:70:in `each'
     # ./spec/models/user_spec.rb:70:in `block (2 levels) in <top (required)>'

  2) when email format is valid should be valid
     Failure/Error: @user.email = valid_address
     NoMethodError:
       undefined method `email=' for nil:NilClass
     # ./spec/models/user_spec.rb:81:in `block (3 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:80:in `each'
     # ./spec/models/user_spec.rb:80:in `block (2 levels) in <top (required)>'

Finished in 0.527 seconds
9 examples, 2 failures

Failed examples:

rspec ./spec/models/user_spec.rb:67 # when email format is invalid should be invalid
rspec ./spec/models/user_spec.rb:78 # when email format is valid should be valid
我不知道问题出在哪里。我知道它说了什么,但我甚至从教程C&P的代码,以双重检查我做了什么,以确保一切都是正确的类型

这是用户规格文件

这是user.rb文件


在我添加电子邮件验证之前,失败不会出现。

在开始测试之前,请确保您正在创建@user。。您的用户测试中有这些行吗


错误很明显!。您正在将电子邮件设置为零类。这意味着你应该将电子邮件设置为我们所说的用户

 @user.email = "something"
错误是抱怨没有用户,并且不会有任何用户电子邮件

这里是一个示例代码,可以帮助您解决此问题

 describe "validations" do
   before(:each) do
     @user = User.new(name: "gates", email: "somename@gmail.com")
   end
   it "should be invalid" do
     invalid_emails = %w{gs@gmail p.com name.gmail.com foo.ymail}
     invalid_emails.each do |invalid_email|
       @user.email = invalid_email
       expect(@user.email).to_not be_valid
    end
   end

   it "should be valid" do
    @user.name = "somename"
    valid_emails = %w{user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp 
    a+b@baz.cn}
    valid_emails.each do |valid_email|
     @user.email = valid_email
     expect(@user.email).to be_valid
    end
   end  
 end
请确保已在Fixers文件夹中为用户创建Fixer


希望这有帮助

nil:NilClass错误告诉您@user不存在/未设置为任何值。你在使用哪一个教程?部分遵循michael hartl教程。我必须遵循它为我的网站创建用户注册/配置文件部分。是的。在do@user=user.newname之前:示例用户,电子邮件:user@example.com,密码:foobar,密码\u确认:foobar
 describe "validations" do
   before(:each) do
     @user = User.new(name: "gates", email: "somename@gmail.com")
   end
   it "should be invalid" do
     invalid_emails = %w{gs@gmail p.com name.gmail.com foo.ymail}
     invalid_emails.each do |invalid_email|
       @user.email = invalid_email
       expect(@user.email).to_not be_valid
    end
   end

   it "should be valid" do
    @user.name = "somename"
    valid_emails = %w{user@foo.COM A_US-ER@f.b.org frst.lst@foo.jp 
    a+b@baz.cn}
    valid_emails.each do |valid_email|
     @user.email = valid_email
     expect(@user.email).to be_valid
    end
   end  
 end