Ruby on Rails 2.3.8: Тестирование: переменная экземпляра Nil, когда объявлена ​​на вершине класса? - PullRequest
0 голосов
/ 21 июня 2011

Итак ... вот верхняя часть моего файла модульного теста.

class ObjectTest < ActiveSupport::TestCase
  @user = -1

тест, который не пройден (также первый, кто использует @user)

test "for detection of first content" do
  puts "+++++++++++++++++++++++++++++ #{@user.name}"

И этоэто ошибка, которую я получаю

NoMethodError: undefined method `name' for nil:NilClass

Теперь я знаю, что число не может иметь никаких атрибутов, таких как .name .. но я пытаюсь решить проблему, не связанную с попыткой получить имя целых чисел,Проблема в том, что переменная экземпляра, определенная где-либо в моем тестовом файле, мгновенно превращается в ноль, когда начинается тест na - как вы можете, фактическое содержание теста не имеет значения, данные внутри @user как-то исчезают.= \

1 Ответ

2 голосов
/ 21 июня 2011

Переменные экземпляра класса немного странные, и я их не так часто использую, но если я правильно их укажу, они существуют в самом классе и доступны только с помощью символа @ в методах класса - так что вы будете должен обращаться к @user как ObjectTest.user или self.class.user, когда вы используете методы экземпляра, в противном случае Ruby будет искать переменную экземпляра экземпляра внутри методов экземпляра. Другими словами, в функции класса вы можете ссылаться на @user, но в функции экземпляра Ruby ищет переменную @user в instance . здесь - страница, демонстрирующая это поведение.

Поскольку переменные класса (например, @@user) используют совершенно другой синтаксис, они не должны демонстрировать это поведение с ограничением области видимости - вы можете использовать @@user как в классе, так и в методах экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...