[AWDwR4] Iteration E 中遇到的问题汇总

解决Rails项目中测试错误并使用Rails Console调试
本文详细介绍了在Rails项目中遇到测试错误时的排查过程,包括使用`rails console --sandbox`命令避免数据库操作的影响,并通过运行特定测试用例来定位问题所在。特别强调了如何在Rails Console中创建测试对象并检查其有效性,揭示了由于测试数据不合规导致的失败案例。同时,提供了在测试过程中输出信息的方法,以及如何利用`--trace`参数增强调试信息。文章还分享了通过调整测试数据长度解决错误的实践,最终成功通过测试用例。

Q1. teration E1中,p142页 执行rake test:units 后出错:

1) Failure:
test_product_price_must_be_positive(ProductTest) [/home/csd/railsProjects/depot/test/unit/product_test.rb:36]:
Failed assertion, no message given.

看代码好像没什么错误的地方,hailong提醒我可以用 rails console --sandbox 命令, 使用 --sandbox 参数时, 对数据库的所有修改都会在退出console时回滚。我按照测试用例中的数据new了一个 Product p,然后查看p的valid属性,果然为false,再去查看 p.errors信息,发现是我照着书上的代码写例子时,嫌 title字段太长了,随手输的title太短了导致的。在rails console中输入的命令如下:

1.9.3p194 :001 > p = Product.new(:title => "Awd sds",
1.9.3p194 :002 >     :description => "yyy",
1.9.3p194 :003 >     :image_url => "fred.jpg",
1.9.3p194 :004 >     :price => 1 )
1.9.3p194 :005 > p.valid?
 Product Exists (0.2ms)  SELECT 1 AS one FROM "products" WHERE "products"."title" = 'Awd sds' LIMIT 1
 => false
1.9.3p194 :006 > p.errors
 => #<ActiveModel::Errors:0x0000000326ecf8 @base=#<Product id: nil, title: "Awd sds", description: "yyy", image_url: "fred.jpg", price: #<BigDecimal:3371808,'0.1E1',9(36)>, created_at: nil, updated_at: nil>, @messages={:title=>["It's too short"]}>

PS:

  跑测试时,如果想在测试过程中打印一些信息,可以使用 puts 来输出信息,rails 3 中,使用 rake 时加上 --trace 参数或者使用
ruby -Itest test/unit/product_test.rb 也可以,参考链接

回到本系列的目录

转载于:https://www.cnblogs.com/Jack47/archive/2012/10/31/2748796.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值