Rails:Rspec和控制台输出不同

时间:2014-04-06 20:21:40

标签: ruby-on-rails rspec rails-console

我的规格有问题。我试图运行一个创建和销毁相关对象的规范,但我的规范都没有创建或销毁该对象。奇怪的是,我可以将每行测试中的每一行代码(除.should除外)复制并粘贴到控制台中,控制台将完美地运行每个期望,创建并销毁这些对象。这是一个样本:

it "should not destroy notification for like on comment" do
  comment = FactoryGirl.create(:comment)
  like = FactoryGirl.create_list(:like, 2, likable: comment)
  like.first.destroy
  note = comment.user.notifications.find_by(notifiable: comment, from_comment: false)
  note.should_not be_nil
end

只有特定评论的第一个才会向该评论的作者发送通知。如果评论只有一个像,并且类似的东西被销毁,它将破坏它最初发送的通知,但如果评论在任何时候有超过0的喜欢,它就不会销毁通知。

问题是我不是在编写可扩展代码吗?我知道我的规格可能并不完美,但是为什么控制台会以相同的输入获得不同的结果?

1 个答案:

答案 0 :(得分:0)

您是在测试环境中还是在开发中运行rails控制台,因为它是默认的? 不同的数据库和环境配置可能是导致不同行为的原因,在您在控制台中手动测试时,注释对象可能已存在于开发数据库中。

尝试在测试环境中运行控制台:

$ rails c test

或者更好的是暂时将调试器行放入测试代码中(如果没有安装调试器,则需要安装'调试器'宝石):

it "should not destroy notification for like on comment" do
  comment = FactoryGirl.create(:comment)
  like = FactoryGirl.create_list(:like, 2, likable: comment)
debugger
  like.first.destroy
  note = comment.user.notifications.find_by(notifiable: comment, from_comment: false)
  note.should_not be_nil
end