0

在Michael Hartl 编写的 Ruby on Rails 教程的第 6.x 章中,我无法让 Rspec 通过email is not present检查。

以我有限的知识:

  • User_spec 使用 before do 之后的代码创建一个测试用户。
  • 然后根据属性检查此用户user.rb以确保其:presence有效。
  • 如果有效,则检查返回 true 或 false。
  • 在下一个代码中,在 { @user.email = " " } 之前将电子邮件设置为空
  • 然后说it { should_not be_valid }

但是,它失败User when email is not present错误。

/spec/models/User_spec.rb

require 'spec_helper'

describe User do

  before do
    @user = User.new(name: "Example User", email: "user@example.com")
  end

  subject { @user }

  it { should respond_to(:name) }
  it { should respond_to(:email) }

  it { should be_valid }

  describe "when email is not present" do
    before { @user.email = " " }
    it { should_not be_valid }
  end
end

spec/models/user.rb

class User < ActiveRecord::Base
  validates :name,  presence: true
  validates :email, presence: true
end

失败:

1) 电子邮件不存在时的用户失败/错误:它 { should_not be_valid } 预期 # 无效 # ./spec/models/user_spec.rb:18:in `block (3 levels) in '

Finished in 0.03278 seconds
4 examples, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:18 # User when email is not present
4

1 回答 1

2

您正在验证电子邮件是否存在,这意味着如果值为 nil 或空字符串,它将失败。

在描述不应存在电子邮件的情况的 rspec 块中,您将电子邮件地址定义为由单个空格组成的字符串。您实际上想通过删除空格来使其成为空白字符串:

before { @user.email = "" }

现在将无法通过验证。

于 2013-10-15T08:29:42.690 回答