У меня есть эти модели:Почему мой Rails Minitest Polymorphic Fail?
class User < ActiveRecord::Base
has_one :setting, as: :resource, dependent: :destroy
has_many :services
end
class Setting < ActiveRecord::Base
belongs_to :resource, polymorphic: true
end
class Service < ActiveRecord::Base
belongs_to :user
end
и у меня есть этот фрагмент кода от контроллера доступа к ним, который работает при тестировании вручную (это метод before_action):
before_action :setup
def get_vars
@setting = Setting.find_by_booking_url @url
@user = @setting.resource
@services = @user.services
end
def setup
@url = params[:url]
@setting = Setting.find_by_url @url
@user = @setting.resource
end
, но при использовании автоматизированное тестирование этих приборов:
# fixtures/users.yml
james:
email: '[email protected]'
first_name: 'James'
last_name: 'Soften'
encrypted_password: <%= default_password_digest %>
# fixtures/settings.yml
scott_settings:
resource: james (User)
time_zone: 'Pacific Time (US & Canada)'
url: 'urlsegment'
и этот тест контроллера код:
setup do
@user = users(:james)
end
def test_booking_page_success
get :new, url: @user.setting.url
assert_response :success
end
он терпит неудачу с ошибкой:
undefined method `services` for nil:NilClass
, который указывает на то, что я не могу получить доступ к «ресурс», чтобы получить пользователя от объекта настройки.
Я проверил переменные, используя byebug (в середине прогона тестов), а объект Setting (@ user.setting) имеет имя resource_id и resource_name, поэтому мне было интересно, почему я не могу получить доступ к пользователю из объекта Setting, используя " ресурс "при запуске тестов.
Любые идеи?
Спасибо!
EDIT: добавлена еще контроллер кода
EDIT: добавлено поле URL в настройках фиксатора
Это только я или возможно, что '@user = @ setting.resource' не имеет смысла? в методе get vars. Это может не сработать при ручном тестировании по разным причинам? – christoshrousis
Можете ли вы обновить часть вашего контроллера, которая задает переменную экземпляра '' @ url''? –
обновление предоставлено – yretuta