почему тесты проваливаются в командной строке и проходят через консоль rails? - PullRequest
0 голосов
/ 06 февраля 2012

хорошо - ответить на мой собственный вопрос (в ретроспективе) - «следи за своей шестеркой»;Это означает, что настройки, определения и крошечные «заплатки» из прошлого могут подкрасться к вам!

В моем случае, переменная окружения, которая помогает мне default-scope все мои модели, была виновником!

Это сущность документирует мою попыткучтобы доказать, что точно такой же тест проходит в консоли рельсов, при запуске с

OX_ID=1 RAILS_ENV=test r c

, который завершается неудачно при запуске мельницы с rake spec , обеспечивая такой вывод:

Running spec/models/user_spec.rb
....F


Failures:

  1) User should have 1 role through user_group
     Failure/Error: permission = Factory.create( :roleable, authorization: "all", ox: @ox, role: role )
     ActiveRecord::RecordInvalid:
       Validering fejlede: Ox skal udfyldes
     # ./spec/factories/factories.rb:28:in `block (3 levels) in <top (required)>'
     # ./spec/models/user_spec.rb:60:in `block (2 levels) in <top (required)>'

Finished in 2.01 seconds
5 examples, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:56 # User should have 1 role through user_group

Будучи абсолютным новичком в тестировании Rspec и не особо довольствуясь всем стеком Rails, который, кстати, становится все выше и выше, я полностью упустил, что мой ENV ["OX_ID"] в командной строке не выжилв тестовую среду (причины, почему / как / могли бы?)

Чтобы убрать из этого

Я наконец добавил

y user.roles.to_sql

к моему тесту (что позволило мне увидеть, какой SQL Rails компилируется) - и когда я увидел вывод, я не поверил своим собственным глазам!

SELECT `roles`.* FROM `roles` INNER JOIN `roleables` ON `roles`.`id` = `roleables`.`role_id`
  INNER JOIN `user_groups` ON `roleables`.`roleable_id` = `user_groups`.`id` AND `roleables`.`roleable_type`
  = 'UserGroup' INNER JOIN `user_groups_users` ON `user_groups`.`id` = `user_groups_users`.`user_group_id`
  WHERE `user_groups_users`.`user_id` = 3 AND (roles.ox_id=NULL) AND (roleables.ox_id=NULL)
  AND (user_groups.ox_id=NULL)

(roles.ox_id=NULL) отдал все это!Я ожидал, что он скажет roles.ox_id=1 и вот оно!

1 Ответ

0 голосов
/ 06 февраля 2012

Вы запускаете код rspec / shoulda в консоли, в среде разработки, где библиотеки не загружаются. Я не совсем уверен, как бы вы поступили, но если вы хотите провести быстрый тест в консоли, вы можете просто распечатать:

user.user_groups[0].roles.count == 1

В этом случае лучше быть проще. Надеюсь, это поможет.

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