Я тестирую свои модели ActiveRecord в RSpec, и я пытаюсь ускорить мои тесты, просто создавая экземпляры вместо создания модели FactoryGirl, но ActiveRecord::Associations::CollectionProxy.include?
возвращает true
, когда я ожидаю false
.Rails .include? возвращает true, когда это не должно
код Я тестирование этот метод в модели Schedule, который передается аргумент экземпляра модели Location ...
def available_at_location(location)
locations.include?(location)
end
И тест ...
before do
subject.locations = [location_b]
end
it 'returns false' do
result = subject.available_at_location(location_a)
expect(result).to be(false)
end
когда я создаю location_a
и location_b
с FactoryGirl тестовых проходов и include?
возвращается false
, но когда я создаю экземпляр location_a
и location_b
с этим кодом, тест не пройден, и в т.ч. удэ? возвращается true
.
let(:location_a) { Location.new(name: 'London') }
let(:location_b) { Location.new(name: 'York') }
Печать locations
показывает, что это CollectionProxy, содержащий location_b
, и печать location
аргумент показывает, что location_a
, как с правильными свойствами. И, include?
возвращает true
, передан ли аргумент location
или нет.
EDIT: некоторый дополнительный код.
Это код, чтобы определить тему ...
subject { described_class.new(locations: [location_a]) }
И это код FactoryGirl Местоположение завода ...
require 'faker'
FactoryGirl.define do
factory :location do
name { Faker::Company.name }
address { Faker::Address.street_address }
city { Faker::Address.city }
zipcode { Faker::Address.zip_code }
landline { Faker::PhoneNumber.phone_number }
association :organization
end
end
нотабене Я попытался предоставить организацию конструктору (Location.new(name: 'London', organization: Organization.new)
), но он не меняет результат.
, пожалуйста, укажите свой заводской код. – Ilya
Я не был уверен, что вы имели в виду определение предмета (я не использовал FG для создания темы в любой момент) или FactoryGirl для местоположения, но я предоставил оба в редактировании сообщения. – Squig