2013-04-29 77 views
0

我正在尝试测试我的用户模型(使用devise宝石)。我正在运行devise宝石的rails4分支。我正在尝试编写一个最小密码长度的测试。使用RSpec测试密码长度使用设计

在我user_spec.rb,我已经写了:

require 'spec_helper' 

describe User do 
    before { @user = User.new(full_name: "Example User", email: "[email protected]", password: "foobar", password_confirmation: "foobar") } 

    subject { @user } 

    it { should respond_to(:full_name) } 
    it { should respond_to(:email) } 
    it { should respond_to(:password) } 
    it { should respond_to(:password_confirmation) } 
    # it { should ensure_length_of(:password).is_at_least(8) } 

    it { should be_valid } 

    describe 'when full name is not present' do 
    before { @user.full_name = " " } 
    it { should_not be_valid } 
    end 

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

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

    describe 'when password is too short' do 
    it { should ensure_length_of(:password).is_at_least(8) } 
    it { should_not be_valid } 
    end 
end 

不过,我仍然得到这个故障/错误运行rspec spec/时:

Failure/Error: it { should be_valid } 
expected #<User id: nil, email: "[email protected]", encrypted_password: 
"$2a$04$/Ifwb1dmfzG6xtBS/amRfOrTTopd8P6JSV48L0G/SWSh...", 
reset_password_token: nil, reset_password_sent_at: nil, 
remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, 
last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, 
created_at: nil, updated_at: nil, full_name: "Example User"> to be valid, 
but got errors: Password is too short (minimum is 8 characters) 
# ./spec/models/user_spec.rb:14:in `block (2 levels) in <top (required)>' 
+0

'foobar'长度为6个字符 – apneadiving 2013-04-29 12:41:36

回答

1

在我看来,你的spec文件工作得很好。

您的it { should be_valid }测试在第14行上失败。这是因为您的密码为“foobar”,只有6个字符长,从而导致用户失效。

尝试改变

before do 
    @user = User.new(
    full_name: "Example User", 
    email: "[email protected]", 
    password: "foobar", 
    password_confirmation: "foobar") 
end 

到:

before do 
    @user = User.new(
    full_name: "Example User", 
    email: "[email protected]", 
    password: "foobar123", 
    password_confirmation: "foobar123") 
end 
1

您的测试还没有一个有效的密码创建的用户。所以你的测试实际上是保证了预期的行为。

将您的测试用户密码更改为“长测试密码”,它应该可以正常工作。

致以问候