2012-02-06 1 views
0

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

В моем случае переменная окружения, которая мне помогает 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 и вот он!

ответ

0

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

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

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

+0

нет! (Нет), я не работаю в dev env. (Нет) это не помогло <:) –

Смежные вопросы