我尝试从“使用Rails 4的敏捷Web开发”创建网上商店。当我写'rake test'时,我收到了这条消息:
$ 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
请帮助我,我做错了什么?
答案 0 :(得分:5)
似乎在Rails 4中已经更改了“已经采取”案例的错误消息的位置,并且该书必定已经错过了此更新。
错误消息已移至errors.messages
的名称空间,其中ActiveModel的其他验证错误消息也驻留在该名称空间中。因此,“已采取”错误消息是在密钥activerecord.errors.messages.taken
下设置的,但在Rails 4中,它位于errors.messages.taken
下。
如果使用新密钥更新测试中的第82行,则测试应该通过。
答案 1 :(得分:1)
就像消息所述,您在en.activerecord.errors.messages.taken
中没有config/locales
的翻译。
此外,在assert_equal
方法中,第一个参数是实际值,而第二个参数是期望值。所以它应该是:
assert_equal product.errors[:title], ["has already been taken"]
在这种情况下。