Я пытаюсь протестировать именованную область в моей модели Rails с помощью RSpec, используя FactoryBot.Я создаю несколько записей, где только одна возвращается областью действия.
RSpec.describe GemNamespace::GemModel, type: :model do
before(:all)
FactoryBot.create(:gem_model, :trait1) # id 1
FactoryBot.create(:gem_model, :trait2) # id 2
FactoryBot.create(:gem_model, :trait3) # id 3
end
let(:included_record) { GemNamespace::GemModel.find 1 }
describe 'my_named_scope' do
it 'returns only records matching the conditions' do
scope_results = GemNamespace::GemModel.my_named_scope
expect(scope_results).to contain_exactly(included_record)
end
end
end
Тест не пройден, потому что хотя included_record
является единственной записью в scope_results
, некоторые отладки показывают, чтоincluded_record
на самом деле по какой-то причине объект Ruby отличается от объекта, указанного в результатах.Таким образом, contains_exactly терпит неудачу.
Я провел тестирование объема таким образом на тоннах моделей, и это всегда работало.Единственное отличие от этого состоит в том, что модель определена внутри гема, и я расширяю ее функциональность, добавляя к ней свою именованную область в приложении Rails.
Чего мне не хватает?Почему он ведет себя так только для этой модели?
Если это имеет значение:
- Ruby 2.5.0
- Rails 5.1.5
- rspec 3.7.0
- rspec-rails 3.7.2
- factory_bot (_rails) 4.8.2
ОБНОВЛЕНИЕ: Я положу это здесь вместо редактирования выше.Я на самом деле тестирую представление базы данных, а не таблицы.Представления не имеют столбца уникальных идентификаторов, поэтому я на самом деле не делаю GemNamespace::GemModel.find 1
выше, а вместо where(column: <condition value>)
.