0

私はレールに不慣れです:)私の最初のテストを実行しようとしています。なぜこのテストに合格するのですか?ユーザー名には少なくとも2文字が必要ですが、私のユーザー名にはそれ以上の文字が含まれていますが、それでもテストに合格します。

user.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。2 つのインスタンスは同じではありません。

暗黙の主語を使用する場合は、次のようにします。

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