ruby-on-rails – 为什么人们不在Rspec中访问数据库?
我经常看到在Rspec中使用mock的代码,如下所示:
describe "GET show" do it "should find and assign @question" do question = Question.new Question.should_receive(:find).with("123").and_return(question) get :show,:id => 123 assigns[:question].should == question end end 但是为什么他们不添加id =>的问题123在数据库中,通过get检索它并销毁它?这是最佳做法吗?如果我不遵守规则,会发生什么不好的事情吗? 解决方法
当您编写行为测试(或单元测试)时,您尝试仅测试代码的特定部分,而不是整个堆栈.
为了更好地解释这一点,你只是表达并测试“函数A应该用这些参数调用函数B”,所以你要测试函数A而不是函数B,你为它提供了一个模拟. 这很重要,原因如下: >您不需要在构建代码的每台计算机上都安装数据库,如果您在公司中使用数百个项目的构建计算机(和/或持续集成),这一点非常重要. 实际测试整个堆栈的测试称为“端到端测试”或“集成测试”(取决于它测试的内容).这些也很重要,例如,可以使用一组没有模拟数据库的测试来查看给定应用程序是否可以安全地运行与开发期间使用的DB不同的DB,并最终修复包含有问题的SQL语句的函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |