나는 주로 레일 테스트 도구를 사용하여 테스트를 수행하고 있습니다. rspec, factory_girl, shoulda, and faker
gems.factorygirl을 사용하여 user_id를 연결하는 방법
has_one
및 belongs_to
연관을 테스트하고 싶습니다. 나는 user.rb
(name
)이고 address.rb
(street
, city
및 user_id
) 모델을 가지고 있습니다.
위조자를 사용하여 가짜 연관을 만드는 방법을 알아 내려고하고 있습니다. 이 사양은
FactoryGirl.define do
factory :address do
street {Faker::Address.street_address}
city {Faker::Address.city}
#Creates fake user and use that user's id for user_id)#
user = build(:user, name: "Joe", id: 2)
user_id {user.id}
end
end
: 이것은 내가 현재 가지고 무엇을 나는 가짜 거리를 만들고 가짜 사용자와 연결 싶지만 spec/factories/addresses.rb
에 작업을 수행하는 방법을 알아낼 수 없습니다 /models/address_spec.rb
require 'rails_helper'
RSpec.describe Address, type: :model do
it "has a valid factory" do
address = build(:address)
expect(address).to be_valid
end
it {should belong_to(:user)}
end
나는 그것을 실행
, 그것은add_attribute': wrong number of arguments (given 3, expected 1..2) (ArgumentError)
오류를 보여줍니다. 나는 인수에서 ID를 제거하려고 시도하고 그냥
user = build(:user, name: "Joe")
않았다 그러나 여전히 동일한 오류 메시지가 표시됩니다.
addresses
공장에 사용자 회선을 포함시키지 않으면 테스트 은을 전달합니다. 나는 주소가 belongs_to :user
이고 사용자는 has_one :address
임을 확인했다.
가짜 연관을 생성하고 가짜 주소를 연결할 수 있습니까? user.id
? Address
의 user_id
도 테스트하고 싶습니다.
편집 - 관련 공장 및 모델은 다음과 같습니다
공장
addresses.rb
FactoryGirl.define do
factory :address do
street {Faker::Address.street_address}
city {Faker::Address.city}
user
end
end
users.rb
FactoryGirl.define do
factory :user do
name {Faker::Name.name}
end
end
사양/모델
address_spec.rb
require 'rails_helper'
RSpec.describe Address, type: :model do
it "has a valid factory" do
association user
specific_user = build(:user, name: 'Joe')
address = build(:address, specific_user)
expect(address).to be_valid
end
it {should belong_to(:user)}
end
오류 실행 address_spec.rb
NameError:
undefined local variable or method `user' for #<RSpec::ExampleGroups::Address:0x00000001a94b00>
# ./spec/models/addres
#을 <사용자 : 0x00000005c96850>'.스펙에'association user'를 추가했지만, 이제'undefined local variable 또는 method'user ''를 보여줍니다 ... 내가 누락 된 것이 무엇인지 알고 계십니까? – Iggy
'user'에 대한 팩토리를 정의해야합니다. – kasperite
'FactoryGirl.define do; 공장 : 사용자가; 이름 {Faker :: Address.name}; 종료; 끝 '공장/users.rb에. 나는 그 사용자가 어떻게 든 존재한다는 것을'주소'가 알도록해야만 하는가? – Iggy