2013-03-04 3 views
0

im new to rails :) im пытается запустить мой первый тест. почему проходит этот тест? имя пользователя должно иметь не менее 2 символов, мое имя пользователя больше и оно все равно проходит тест.RSpec с разработкой

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: "[email protected]", 
        password: "foobar", password_confirmation: "foobar") 
end 

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

end 
+1

я не вижу тест на длину имени пользователя. также валидация будет для МИНИМАЛЬНОГО из 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 = aaaaa.

Это говорит о том, что ваше имя пользователя более двух символов, поэтому ваша проверка в порядке, { minimum: 2 } тест должен пройти.

Если вы хотите, чтобы убедиться, что имена пользователей более 2 символов, то

@user.username = 'a' 

Надежда, что помогает.

0

Эта линия:

it { should_not be_valid } 

Использует implicit subject. RSpec автоматически создает экземпляр класса User, который затем можно использовать неявно в блоке it. Но ваш тест затем создает другой экземпляр и назначает его @user - два экземпляра не совпадают.

Если вы хотите использовать неявную тему, вы можете сделать:

subject { User.new(args) } 
before { subject.username = "aaaahfghg" } 
it { should_not be_valid } 
Смежные вопросы