加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为什么人们不在Rspec中访问数据库?

发布时间:2020-12-17 03:45:31 所属栏目:百科 来源:网络整理
导读:我经常看到在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].sho
我经常看到在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,你为它提供了一个模拟.

这很重要,原因如下:

>您不需要在构建代码的每台计算机上都安装数据库,如果您在公司中使用数百个项目的构建计算机(和/或持续集成),这一点非常重要.
>您可以获得更好的测试结果,如果功能B中断,或者数据库无法正常工作,则不会在功能A上出现测试失败.
>您的测试运行得更快.
>在每次测试之前拥有一个干净的DB总是很痛苦.如果先前的测试运行停止,在数据库上留下具有该ID的问题怎么办?您可能会因为重复ID而导致测试失败,而实际上该功能正常运行.
>在运行测试之前,您需要正确的配置.这不是一个令人难以置信的问题,但如果测试可以“开箱即用”运行,而不必配置数据库连接,临时测试文件的文件夹,用于测试电子邮件的SMTP服务器等等,那就更好了.

实际测试整个堆栈的测试称为“端到端测试”或“集成测试”(取决于它测试的内容).这些也很重要,例如,可以使用一组没有模拟数据库的测试来查看给定应用程序是否可以安全地运行与开发期间使用的DB不同的DB,并最终修复包含有问题的SQL语句的函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读