我一直在学习RoR,当我学习TDD时,事情开始变得更加复杂。在我的应用程序的某个阶段,我认为在真实数据上运行测试会更好。
真实数据与样本数据
在网上搜索时,我发现测试并不意味着在真实数据上运行,而是在样本数据上运行。但我不同意这一点。
让我们假设我的应用程序有一个别名系统。因此,当你访问一个随机的url时,它会弄清楚这个片段想要什么,并重定向到正确的规范url。让我们补充一下,别名字典存储在一些模型中。我们该如何对那本字典进行测试?每个别名/关键字的硬代码规范文件?
坚持使用真实数据
我意识到的前两件事,但非常不为人知,是:
- Rspec测试环境无法访问开发模型的数据
- FactoryGirl控制着我的测试数据库,所以我不能选择填充它
作为一个新手,我能想到的最好的解决方案是,我可以在spec/support
文件夹中创建一些类,并在工厂内部调用它们,以便获得真实的数据。这些类有一个嵌套的真实数据库信息的短样本,所以我的测试可以是"真实的"。
周围的专业人士可以提出什么建议来改进它
我认为您可能需要研究构建一个seeds.rb文件来填充数据库。这通常用于初始化开发数据库,以便在您的应用程序中使用(并在rails控制台中查询),但您可以使用它为测试数据库种子,如本答案所述。
您当然不应该使用开发数据库进行测试。您可以为测试数据库播种,也可以创建反映各种场景的工厂。
FactoryGirl控制我的测试数据库,所以我不能选择填充它。
您可以使用多个工厂来表示一个业务实体,具体取决于测试中的场景。FactoryGirl允许你在工厂里筑巢,让这一切变得很容易。您可以用一组基本的有效属性定义一个工厂,并在单元测试中使用它。对于集成(功能)测试,可以使用在基本属性上扩展的嵌套工厂来实现特定场景。您可以根据需要拥有这些特定于实现的工厂的任意多个变体。