Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 由于之前的测试,Rspec单元测试失败_Ruby On Rails_Ruby_Unit Testing_Rspec - Fatal编程技术网

Ruby on rails 由于之前的测试,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'

我是Rspec的新手,我正在为一个老项目进行测试。我在设置变量方面有问题。基本上,我的用户对象受以前测试中的操作影响。 我有一个简单的用户工厂:

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' }
    ...