Ruby on rails 由于之前的测试,Rspec单元测试失败
我是Rspec的新手,我正在为一个老项目进行测试。我在设置变量方面有问题。基本上,我的用户对象受以前测试中的操作影响。 我有一个简单的用户工厂:Ruby on rails 由于之前的测试,Rspec单元测试失败,ruby-on-rails,ruby,unit-testing,rspec,Ruby On Rails,Ruby,Unit Testing,Rspec,我是Rspec的新手,我正在为一个老项目进行测试。我在设置变量方面有问题。基本上,我的用户对象受以前测试中的操作影响。 我有一个简单的用户工厂: FactoryGirl.define do factory :user do first_name 'Bob' last_name 'Shabbadoo' office login 'lurker48' email 'test.user@test.com'
FactoryGirl.define do
factory :user do
first_name 'Bob'
last_name 'Shabbadoo'
office
login 'lurker48'
email 'test.user@test.com'
password 'TestWhatNots#21'
password_confirmation{|u| u.password}
end
end
然后我进行了实际的rspec测试
require "spec_helper"
describe User do
it 'has a valid factory' do
FactoryGirl.build(:user).should be_valid
end
describe '#password' do
it "cannot contain the word 'password'" do
valid_user = FactoryGirl.build(:user)
valid_user.password << "password"
valid_user.password_confirmation = valid_user.password
valid_user.should_not be_valid
end
it "cannot contain the users last_name" do
valid_user = FactoryGirl.build(:user)
valid_user.password << valid_user.last_name
valid_user.password_confirmation = valid_user.password
valid_user.should_not be_valid
end
it "cannot contain the users first_name" do
valid_user = FactoryGirl.build(:user)
valid_user.password << valid_user.first_name
valid_user.password_confirmation = valid_user.password
valid_user.should be_valid
end
end
end
但当我仔细查看密码时,它看起来是这样的:
TestWhatNots#21passwordShabbadooBob
为什么以前测试中的操作会污染信息?当您构建新的用户对象时,factory girl将指定给其密码的字符串(它是字符串类的实例)。每次执行此操作时,您的用户密码都指向该对象—如果生成两个用户,他们的密码不仅相同—而且是同一个对象
据我记忆所及,通过使用
,一个关联名调用这个对象的工厂,所以这两个对象应该是不同的。是的,你是对的。我不需要担心关联,因为我不会像以前那样操纵信息。我使用了+=语法,因为这只会在需要时创建一个新字符串。
TestWhatNots#21passwordShabbadooBob
u1 = FactoryGirl.build(:user)
u2 = FactoryGirl.build(:user)
u1.password.object_id == u2.password.object_id #=> true!
valid_user.password += valid_user.first_name
factory :user do
first_name { 'Bob' }
last_name { 'Shabbadoo' }
...