2014-11-24 70 views
1

我尝试从“使用Rails 4进行敏捷Web开发”创建网上商店。当我写 '耙测试',我得到这个消息:RubyOnRails Rake测试失败

$ rake test 
Run options: --seed 54737 

# Running: 

........F...F 

Finished in 0.279167s, 46.5671 runs/s, 118.2088 assertions/s. 

    1) Failure: 
ProductTest#test__product_is_not_valid_without_a_unique_title_-_i18n     [/Users/roni/Coding/Ruby/depot/test/models/product_test.rb:82]: 
--- expected 
+++ actual 
@@ -1 +1 @@ 
-["translation missing: en.activerecord.errors.messages.taken"] 
+["has already been taken"] 



    2) Failure: 
ProductTest#test_product_price_must_be_positive  [/Users/roni/Coding/Ruby/depot/test/models/product_test.rb:25]: 
Failed assertion, no message given. 

13 runs, 33 assertions, 2 failures, 0 errors, 0 skips 

这是product_test.rb

http://pastebin.com/1f5zkDwa

请帮助我,我做错了什么?

回答

1

就像信息所述,您没有翻译en.activerecord.errors.messages.takenconfig/locales

此外,在assert_equal方法中,第一个参数是实际值,而第二个参数是预期值。所以它应该是:

assert_equal product.errors[:title], ["has already been taken"] 

在这种情况下。

5

它看起来'已采取'的情况下,错误消息的位置已在Rails 4中更改,并且本书必须错过此更新。

该错误消息已被移动到ActiveModel的其他验证错误消息所在的命名空间,至errors.messages。因此,'已采纳'错误消息被设置在密钥activerecord.errors.messages.taken下,但在Rails 4中,它在errors.messages.taken之下。

如果用新密钥更新测试中的第82行,测试应该通过。

+1

非常感谢,'errors.messages.taken'是我的解决方案! – hernanvicente 2015-02-27 01:24:44