В моей Dashboard#Index
у меня есть это в мой контроллер:Как получить доступ к виртуальному атрибуту из драгоценного камня в Rspec?
tagged_nodes = Node.includes(:user_tags).tagged_with(current_user.email)
Это моя спецификация:
it "assigns all the nodes that are tagged with the current_user email to local variable 'tagged_nodes'" do
get :index
expect(assigns(:tagged_users)).to eq Node.includes(:user_tags).tagged_with(@user.email)
end
Это ошибка я получаю:
Failure/Error: expect(assigns(:tagged_users)).to eq Node.includes(:user_tags).tagged_with(@user.email)
expected: #<ActiveRecord::Relation []>
got: nil
(compared using ==)
Я подозреваю, что это из-за tagged_with
, который является вспомогательным методом из драгоценного камня acts_as_taggable_on
Это то, что действительно вызывает эту ошибку? Если да, то как мне обойти это?
Если нет, что может быть причиной этой ошибки?
Да. Это нормально работает в моем контроллере. Что происходит, я добавляю тесты после факта. Поэтому контроллер работает прямо сейчас, с этой логикой, и я пытаюсь работать в обратном направлении. – marcamillion
А у меня это получилось. В этом случае я бы рекомендовал драгоценный камень «pry». Добавьте его в свой gemfile ('test' и' development' groups), затем добавьте строку 'binding.pry' где-нибудь внутри вашего кода (в этом случае действие контроллера). Когда выполнение Ruby попадет в эту строку, оно остановится и предоставит вам интерактивную консоль, где вы можете запрашивать переменные, вносить изменения и т. Д., Чтобы определить, почему переменная не заполняется, как ожидалось. –
Кстати, вы, вероятно, знаете TDD/BDD, оба из которых побуждают вас писать все спецификации * перед тем, как писать соответствующую реализацию; Я понимаю, что этот подход быстро устраняет эту проблему. К сожалению, я никогда не получал момент «ага» BDD и считал его мучительно утомительным, поэтому я часто бываю в той же лодке, что и вы. ;-) –