У меня есть системная спецификация, где я называю 3 фабрики:
Компания has_many Магазины has_many Полки
В приведенном ниже коде я размещаю отладчик как в спецификации, так и в ApplicationController. При вызове из спецификации все фабрики создаются, как ожидается. Затем, когда я посещаю root_url, я не могу найти те же записи (или вообще никаких записей):
- Company.count возвращает 0
- Магазин (find_by: id) возвращает ноль (используя идентификатор магазина, созданного фабрикой)
Когда я передаю те же фабрики для seed.rb и извлекаю их в моей среде разработки, он корректно отображает страницу и данные.
Что может быть причиной того, что контроллеры теряют из виду данные в этой спецификации?
Спецификация:
RSpec.describe "changing the current shop", type: :system do
let(:company) { create(:company, name: "Test co") }
let(:first_shop) { create(:shop_with_shelves, name: "seeded shop", company: company) }
let(:last_shelf) { create(:standby_shelf, name: "Cool Shelf", shop: first_shop) }
it "displays the name of the current shop" do
first_shop
last_shelf
# debugger here identifies all models created as expected
visit root_path
end
the helper_method:
class ApplicationController < ActionController::Base
helper_method :current_shop
def current_shop
# debugger here is unable to find any models Company.count = 0
@current_shop ||= Company.first.current_shop
end
end
в представлении это:
<%= current_shop.name %>
Ошибка / Ошибка: @current_shop || = Company.first.current_shop
NoMethodError:
undefined method `current_shop' for nil:NilClass
Если при дальнейшем тестировании я смог увидеть, что системные спецификации вызывают эту ошибку, но технические характеристики не соответствуют приведенным ниже:
RSpec.describe "trying a system spec (this fails)", type: :system do
let!(:company) { create(:company) }
let!(:shop) { create(:shop, company: company, is_current: true) }
it "gets to the shops page" do
visit shops_path
end
end
RSpec.feature "trying a feature spec (this passes)", type: :feature do
let!(:company) { create(:company) }
let!(:shop) { create(:shop, company: company, is_current: true) }
scenario "gets to the shops page" do
visit shops_path
end
end