如何在测试中debug?

做测试的时候,案例未通过,满屏飘红是常有的事,所以在测试中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