RubyOnRails Rake测试失败

时间:2014-11-24 14:02:55

标签: ruby-on-rails ruby rake

我尝试从“使用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

http://pastebin.com/1f5zkDwa

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

2 个答案:

答案 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"]

在这种情况下。