2012-02-06 50 views
0

很好 - 回答我自己的問題(回想起來) - '看你的六個';這意味着過去的設置,定義和微小的「補丁」可能會潛入你的身邊!爲什麼測試在提示時失敗並通過導軌控制檯?

在我的情況下,一個環境變量,幫助我默認範圍所有我的模型,是罪魁禍首!

這本gist文件我試圖證明完全相同的測試通過在軌控制檯,當startet與

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堆棧這BTW不斷變得越來越高舒適,我完全錯過了我的電子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

不! (不),我沒有在開發環境中運行。 (沒有)它沒有幫助<:) – 2012-02-06 07:41:15

相關問題