做测试的时候,案例未通过,满屏飘红是常有的事,所以在测试中debug就显得很有必要,为便于阐述,以我自己做的一个events_controller 的测试为例,看看如何debug。
正文
一个测试报错了,而提示又不足以让你立马get到点,比如在做controller的单位测试时,验证create这个method,出错:
很显然,event没有成功写入数据库,如何debug?
首先,你可能想单独跑这一个案例,其他的注释掉。
比较粗暴的方法是注解掉其他的测试案例,只留下你要纠正的那个,另一个方法是用:focus => true
。
两步走:
编辑
spec/rails_helper.rb
, 加入两行设定:RSpec.configure do |config| ...... + config.filter_run :focus => true + config.run_all_when_everything_filtered = true
修改你的test文件,比如针对上面的报错,我的文件是
spec/controllers/events_controller_spec.rb
, 在未通过的案例中,加入了:focus => true
终端运行rspec spec/controllers/events_controller_spec.rb
, 将会只运行这一个实例。
「需要注意的是,测试通过后,记得把:focus => true
移除。」
确认只有这个案例运行后,接下来,我们用byebug下断点,检查下为什么event没有存入数据库。
在app/controllers/events_controller.rb
中,create部分,加入byebug:
终端再次运行rspec spec/controllers/events_controller_spec.rb
, 会发现程序停在那里了:
这时就可以检查变量了。比如我输入@event查看各个字段的赋值情况,发现eventlogo没有赋值成功,fix it。
最后输入continue
, 程序就会继续执行下去。
the End
Happy debugging! :P