Мои константы класса в тестовой среде равны нулю - PullRequest
0 голосов
/ 30 сентября 2010

В классе под названием «Качество» определены следующие константы:

class Quality < ActiveRecord::Base

  [validations excluded in this example]

  NEW = Quality.find_by_name("New")
  LGT = Quality.find_by_name("Light use")
  MED = Quality.find_by_name("Medium use")
  HVY = Quality.find_by_name("Heavy use")
  SCR = Quality.find_by_name("Scrap")
  ANY = Quality.find_by_name("Any")

end

При выполнении моих модульных тестов все эти константы равны нулю.Зачем?Я уверен, что они не равны нулю во время производства / разработки, так как код, который использует их, похоже, работает в моей среде dev / prod.

Я установил фиксаторы для этих записей, поэтому я ожидаю постоянной инициализацииработать.Моя привязка к качествам приведена ниже.Эти приборы находятся в файле по адресу 'test / fixtures / quality.yml'

any:
  value: 0
  name: Any
  extended_name: /all

new:
  value: 5
  name: New
  extended_name:  (or like new)

lgt:
  value: 4
  name: Light use
  extended_name:  (cosmetic damange only)

med:
  value: 3
  name: Medium use
  extended_name:  (some functional damange)

hvy:
  value: 2
  name: Heavy use
  extended_name:  (needs work)

scr:
  value: 1
  name: Scrap
  extended_name: (only good for parts)

Наконец, вот мой модульный тест, который завершается с ошибкой 'Expected not nil'

test "all constant qualities are not nil" do
  assert_not_nil Quality::ANY
  assert_not_nil Quality::NEW
  assert_not_nil Quality::LGT
  assert_not_nil Quality::MED
  assert_not_nil Quality::HVY
  assert_not_nil Quality::SCR
end

1 Ответ

2 голосов
/ 30 сентября 2010

потому что ваша база данных пуста, когда ваш класс загружен. Все светильники вставляются после вашего класса Загрузка.

Если вы хотите такое поведение, я предлагаю вам иметь эти данные в атрибутах вашего класса, лучше.

class

  def self.lgt
    @@lgt ||= Quality.find_by_name("Light use")
  end

  def self.med
    @@med ||= Quality.find_by_name("Medium use")
  end

  etc..

end

В этом случае ваши данные загружаются только 1 раз и только тогда, когда они вам действительно нужны.

test "all constant qualities are not nil" do
  assert_not_nil Quality.lgt
  assert_not_nil Quality.med
end

Использование Constante для этого - действительно плохое решение.

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