хорошо - чтобы ответить на мой собственный вопрос (в ретроспективе) - «следи за своими шестью»; что настройки, определения и крошечные «патчи» из прошлого могут подкрасться к вам!Почему тесты не срабатывают при подсказке и проходят в консоли рельсов?
В моем случае переменная окружения, которая мне помогает default-scope все мои модели, был виновником!
Это этот gist документы мне пытаются доказать, что точно такой же тест проходит в консоли рельсы, когда запущен при
OX_ID=1 RAILS_ENV=test r c
, который не при запуске мельницы с передней спецификации, обеспечивая этот выход:
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 стека, который КСТАТИ держит становится все выше и выше, я полностью пропустил, что мой E NV [ «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
и вот он!
нет! (Нет), я не работаю в dev env. (Нет) это не помогло <:) –