Welcome 微信登录

首页 / 软件开发 / JAVA / Rails开发细节(九)Rails的测试

Rails开发细节(九)Rails的测试2013-12-111.为什么写测试

rails使得我们很容易就可以写测试。在创建model和controller的时候,rails帮助我们创建了测试的骨架代码。

通过简单的运行你的测试代码,你可以确保你的代码在重构之后任然满足需求的功能。

rails测试可以模拟浏览器请求,这样你就可以在不适用浏览器的情况下测试应用的响应情况。

2.测试简介

因为每一个rails应用都会和数据库有大量的交互,因此你的测试也需要一个数据库来进行交互。为了更好的写测试,你需要知道如何建立数据库,以及加载样本数据。

2.1.三个环境

每个rails应用都有三个环境:生产,开发,测试。

在config/database.yml文件中包含这三个环境的数据库设置。

如果你想要在测试数据库中进行数据操作,你需要将开发环境的数据库结构映射到测试环境。你可以执行下面的命令。

rake db:test:prepare

2.2.测试文件夹结构

在你使用rails new命令创建应用的时候,rails会帮你创建一个test文件夹,文件夹包含下面的内容。

root@web:/home/railsapp/login# ls -F test/

fixtures/  functional/  integration/  performance/  test_helper.rb  unit/

unit文件夹存放针对model的测试,functional文件夹存放针对controller的测试,integration文件夹存放针对controller之间交互的测试,fixtures文件夹用来组织测试数据。test_helper.rb保存测试环境的配置信息。

2.3.Fixtures的内幕

一个好的测试,你需要建立一些测试数据。在rails中,你可以通过自定义fixtures来实现。

2.3.1.什么是fixtures

fixtures允许你在测试运行之前,使用预定义的数据填充测试数据库。fixtures是数据库无关的,它是一种yaml格式。

当你使用rails g model创建新model的时候,就会在fixtures文件夹自动创建一个fixtures。

2.3.2.YAML

yaml对人是一种非常友好的描述数据的格式。这些fixtures的后缀是.yml。例如,users.yml。

# lo & behold!I am a YAML comment! david:name: David Heinemeier Hanssonbirthday: 1979-10-15profession: Systems development steve:name: Steve Ross Kellockbirthday: 1974-09-27profession: guy with keyboard
2.3.3.内嵌erb

在yml中也可以内嵌ruby代码,在加载fixtures之前会进行预处理。

下面的yml中就定义了一个变量earch_size。

<% earth_size = 20 %> mercury: size: <%= earth_size / 50 %> brightest_on: <%= 113.days.ago.to_s(:db) %> venus: size: <%= earth_size / 2 %> brightest_on: <%= 67.days.ago.to_s(:db) %> mars: size: <%= earth_size - 69 %> brightest_on: <%= 13.days.from_now.to_s(:db) %>
ruby代码包含在<% %>中。