RSPEC失败,电子邮件格式

问题描述 投票:1回答:2

我已浏览了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_spec文件。

https://gist.github.com/pwz2k/4770845

这里的user.rb文件。

https://gist.github.com/pwz2k/4770854

该故障并没有出现,直到我添加的电子邮件验证。

ruby-on-rails rspec
2个回答
0
投票

请确保您正在创建@user你开始测试之前..你在你的用户测试这些行? (rails tutorial listing 6.16

before do
    @user = User.new(name: "Example User", email: "[email protected]")
end

0
投票

该错误是很清楚!你设置电子邮件至零级。这意味着你应该到电子邮件设置,这是我们说一个用户

 @user.email = "something"

该错误是抱怨没有用户,并且不会有任何电子邮件用户。

为了让在这里工作是一个示例代码,这将帮助你解决这个问题。

 describe "validations" do
   before(:each) do
     @user = User.new(name: "gates", email: "[email protected]")
   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{[email protected] [email protected] [email protected] 
    [email protected]}
    valid_emails.each do |valid_email|
     @user.email = valid_email
     expect(@user.email).to be_valid
    end
   end  
 end

请确保你已经创建了用户的固定在夹具文件夹中。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.