0

我是 Rails 新手 :) 我正在尝试运行我的第一个测试。为什么这个测试通过?用户名应该至少有 2 个字符,我的用户名有更多并且它仍然通过测试。

用户.rb:

validates :username, :length => { :minimum => 2 }

user_spec.rb

require 'spec_helper'

describe User do

before do
  @user = User.new(username: "Example User", email: "user@example.com",
                   password: "foobar", password_confirmation: "foobar")
end

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

end
4

2 回答 2

0
describe "when name is not present" do
 before {  @user.username = "aaaahfghg" }
 it { should_not be_valid }   
end

首先,您的描述块正在测试错误的东西。如果您想测试“名称不存在”,您应该设置:

@user.username = "" #使用户名为空。

但是,为了检查用户名是否为空,您应该添加validates :username, presence: true. 虽然您可能不需要它,因为您有{ minimum: 2 }验证

现在,@user.username = "aaaahf"# 一个更好的写法是 'a' * 5 例如,它创建一个由 5 a's = aaaaa 组成的字符串。

这表示您的用户名超过 2 个字符,因此您的验证很好,{ minimum: 2 }测试应该通过。

如果您想确保用户名超过 2 个字符,那么

@user.username = 'a'

希望有所帮助。

于 2013-03-04T19:28:53.737 回答
0

这一行:

it { should_not be_valid }

使用隐式主语。RSpec 自动创建类的实例,User然后您可以在it块中隐式使用该实例。但是您的测试随后会创建另一个实例并将其分配给@user- 这两个实例不相同。

如果你想使用隐式主语,你可以这样做:

subject { User.new(args) }
before {  subject.username = "aaaahfghg" }
it { should_not be_valid }   
于 2013-03-04T21:31:04.283 回答