我的规格有问题。我试图运行一个创建和销毁相关对象的规范,但我的规范都没有创建或销毁该对象。奇怪的是,我可以将每行测试中的每一行代码(除.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的喜欢,它就不会销毁通知。
问题是我不是在编写可扩展代码吗?我知道我的规格可能并不完美,但是为什么控制台会以相同的输入获得不同的结果?
答案 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