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

ruby-on-rails – Ruby on Rails – 测试数据库

发布时间:2020-12-17 03:00:51 所属栏目:百科 来源:网络整理
导读:有没有办法阻止Rails在运行测试之前清除测试数据库?我想使用生产数据库的副本进行测试,因此我需要防止rails每次都清除数据. 有相当多的数据,所以我想尽可能避免使用灯具,因为我假设每次都需要很长时间来填充数据库. 谢谢, 麦克风 解决方法 您可以通过手动运
有没有办法阻止Rails在运行测试之前清除测试数据库?我想使用生产数据库的副本进行测试,因此我需要防止rails每次都清除数据.

有相当多的数据,所以我想尽可能避免使用灯具,因为我假设每次都需要很长时间来填充数据库.

谢谢,
麦克风

解决方法

您可以通过手动运行测试来避免它

ruby -Itest test/unit/some_test.rb

执行测试数据库重新创建的rake任务(您可以像这样手动运行)

rake db:test:prepare

但我的建议是,你做错了.
测试中的一般想法是,您知道数据库的状态,因此知道对函数的期望.

例如.

test "search_by_name" do
  expected = User.all.select{|u| u.name =~ /arthur/i}
  assert_equal expected,User.search_by_name("Arthur")
end

是一个很好的测试
但是,如果你不知道数据库的状态,你怎么知道有一个亚瑟?

上述测试将通过三个不良案例;

>没有用户记录
>所有用户都被称为“亚瑟”
>没有用户称为arther.

因此创造虚假现实更好
我们知道数据库的状态.

我们想要;

>至少有一个名为“Arthur”的用户
>至少有一个名为“Arthur”的用户作为另一个单词的一部分
>至少一个非亚瑟用户.

一个更好的测试,假设db是空的,并且使用工厂女孩,可能是.

test "search_by_name" do
  expected = [
    Factory.create(:user,:name => "Arthur"),Factory.create(:user,:name => "MacArthur")
  ]
  not_expected = [Factory.create(:user,:name => "Archer")]
  assert_equal expected,User.search_by_name("Arthur")
end

(编辑:李大同)

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

    推荐文章
      热点阅读