Rspec,FactoryGirl和真实样本数据有什么问题?



我一直在学习RoR,当我学习TDD时,事情开始变得更加复杂。在我的应用程序的某个阶段,我认为在真实数据上运行测试会更好。

真实数据与样本数据

在网上搜索时,我发现测试并不意味着在真实数据上运行,而是在样本数据上运行。但我不同意这一点。

让我们假设我的应用程序有一个别名系统。因此,当你访问一个随机的url时,它会弄清楚这个片段想要什么,并重定向到正确的规范url。让我们补充一下,别名字典存储在一些模型中。我们该如何对那本字典进行测试?每个别名/关键字的硬代码规范文件?

坚持使用真实数据

我意识到的前两件事,但非常不为人知,是:

  1. Rspec测试环境无法访问开发模型的数据
  2. FactoryGirl控制着我的测试数据库,所以我不能选择填充它

作为一个新手,我能想到的最好的解决方案是,我可以在spec/support文件夹中创建一些类,并在工厂内部调用它们,以便获得真实的数据。这些类有一个嵌套的真实数据库信息的短样本,所以我的测试可以是"真实的"。

周围的专业人士可以提出什么建议来改进它

我认为您可能需要研究构建一个seeds.rb文件来填充数据库。这通常用于初始化开发数据库,以便在您的应用程序中使用(并在rails控制台中查询),但您可以使用它为测试数据库种子,如本答案所述。

您当然不应该使用开发数据库进行测试。您可以为测试数据库播种,也可以创建反映各种场景的工厂。

FactoryGirl控制我的测试数据库,所以我不能选择填充它。

您可以使用多个工厂来表示一个业务实体,具体取决于测试中的场景。FactoryGirl允许你在工厂里筑巢,让这一切变得很容易。您可以用一组基本的有效属性定义一个工厂,并在单元测试中使用它。对于集成(功能)测试,可以使用在基本属性上扩展的嵌套工厂来实现特定场景。您可以根据需要拥有这些特定于实现的工厂的任意多个变体。