Rails测试《一》fixtures简介

简介:

简介

每个rails应用都包括三个环境:

  • 生产环境
  • 开发环境
  • 测试环境

我们的测试就是跑在测试环境,如果测试涉及数据库,会在测试数据库进行操作。这样不会对生产环境和开发环境的数据造成影响。

 

我们先使用

 
  1. rails new projects 

命令来创建一个rails应用,默认会给我们创建一个projects目录,里面会包含一些默认的目录和文件。其中有一个文件夹test,里面将会放我们全部的测试相关文件。

 

 
  1. $ ls -F test/ 
  2.   
  3.  
  4. fixtures/       functional/     integration/   performance/  test_helper.rb  unit/ 

 

fixtures文件夹

fixtures文件夹中的文件都是用yml为后缀,文件的格式都是yaml。

这里面的文件用来做什么呢?用来创建数据,创建测试用的数据。每个文件对应一张数据库表,文件的名称就是数据库表的名称,里面可以创建很多的数据,每一个数据对应表的一行数据。

文件中一般会写上每个字段的值,即使表的主键id是自增字段,也是可以指定的,如果不指定,系统会自动的分配。

users表结构

 
  1. create_table :users do |t| 
  2.   t.string name 
  3.   t.datetime birthday 
  4.   t.string profession 
  5.  
  6.   t.timestamps 
  7. end 

 

users.yml

 
  1. david: 
  2. id: 1
  3.   name: David Heinemeier Hansson 
  4.   birthday: 1979-10-15 
  5.   profession: Systems development 
  6.  

 

user.rb

 
  1. class User < ActiveRecord::Base 
  2.   attr_accessible :name:birthday:profession 
  3. end 

可以在单元测试和功能测试中使用这些数据,相当于是一些模拟数据。

 

这些yml文件如何使用呢?

在你进行单元unit测试和功能functional测试的时候,会自动加载fixtures文件夹中的yml文件,然后进行下面的三步:

  • 删除测试数据库中已经存在的数据。
  • 将fixtures中的数据加载到测试数据库表中。
  • 然后将fixtures的数据放到一些变量中,在后面的测试就可以直接从变量访问这些数据。

写yml文件的时候有几个点需要注意。

首先,yml文件中模拟数据的属性对应的是数据表的字段,yml文件中的属性个数可以比数据表的字段个数少,但是不能多于数据表的字段个数,或者模拟一些数据库不存在的字段。

为什么?

因为会根据yml文件中模拟的属性生成insert语句的field,然后数据会插入测试数据库。如果发现数据库没有的字段,就会插入失败,很显然,因为insert中包含了数据库表没有的字段。但是你少几个没有关系,但是如果数据库有约束的话,那还是有可能有问题。例如:非空字段,你没有模拟,那就报错了。

其次,有时候我们还是会碰到这样一种情况。我们需要一些实体,而且需要这些实体具有一些属性,但是这些属性在数据库中没有对应的存储。

例如我们常用的用户实体,我们会有两个属性password和password_confirmation,用来注册的时候进行密码的验证,但是最终存入表格的密码是hash以后的值,不是用户在界面上出入的值。

 

 
  1. class User < ActiveRecord::Base 
  2.   attr_accessible :email:name:password:password_confirmation 
  3.  
  4.   validates :password:confirmation => true 
  5.   validates :password:presence => true 
  6. end 

如果你想测试针对密码的validates是否生效,这时候password和password_firmation这两个字段就不能在yml文件中模拟,因为数据库中没有这两个字段。如果在模拟文件中包含这两个字段,会报错的,因为前面说过了,模拟数据会先插入测试数据库,不存在的字段会造成插入失败,测试就失败了。

这样的实体,在测试数据库不存在的字段的时候,如果需要模拟一些这样的实体,就不能再yml文件中模拟了,只能通过代码来模拟这样的实体。然后再进行其他测试。

 
  1. user = User.new(:password => "123":password_confirmation => "123"

 

访问fixtures中的数据。

 

 
  1. users(:divid) 

通过users(:divid)就可以访问到users.yml中模拟的divid的数据。通过users(:divid).name就可以访问模拟的name属性值。

 

总结

  • fixtures就是用来创建模拟数据的。
  • 这些数据会被插入测试数据库,因此不能模拟数据库不存在的属性。
  • 模拟数据可以在单元测试unit test和功能测试functional test中使用,通过表名(:模拟实体名)就可以访问模拟实体。users(:devid)就是一个user,然后users(:devid).name就可以访问name属性的值。

 




本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1075385,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
XML 测试技术 数据格式
Python性能测试Locust简介
Python性能测试Locust简介
Python性能测试Locust简介
|
5月前
|
JSON 测试技术 API
『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程
『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程
80 3
|
5月前
|
XML Java 测试技术
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
202 3
|
5月前
|
XML 测试技术 开发工具
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
93 4
|
4月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
208 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
4月前
|
安全 测试技术 数据库
简介性能测试
简介性能测试
简介性能测试
|
4月前
|
测试技术
HTTP性能测试工具Siege 简介
HTTP性能测试工具Siege 简介
|
5月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
67 0
|
5月前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
41 1
|
12月前
|
Java 测试技术 程序员
「敏捷架构」核心实践:测试驱动开发(TDD)简介
「敏捷架构」核心实践:测试驱动开发(TDD)简介

热门文章

最新文章