Rails开发细节(九)Rails的测试2013-12-111.为什么写测试rails使得我们很容易就可以写测试。在创建model和controller的时候,rails帮助我们创建了测试的骨架代码。通过简单的运行你的测试代码,你可以确保你的代码在重构之后任然满足需求的功能。rails测试可以模拟浏览器请求,这样你就可以在不适用浏览器的情况下测试应用的响应情况。2.测试简介因为每一个rails应用都会和数据库有大量的交互,因此你的测试也需要一个数据库来进行交互。为了更好的写测试,你需要知道如何建立数据库,以及加载样本数据。2.1.三个环境每个rails应用都有三个环境:生产,开发,测试。在config/database.yml文件中包含这三个环境的数据库设置。如果你想要在测试数据库中进行数据操作,你需要将开发环境的数据库结构映射到测试环境。你可以执行下面的命令。rake db:test:prepare2.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.什么是fixturesfixtures允许你在测试运行之前,使用预定义的数据填充测试数据库。fixtures是数据库无关的,它是一种yaml格式。当你使用rails g model创建新model的时候,就会在fixtures文件夹自动创建一个fixtures。2.3.2.YAMLyaml对人是一种非常友好的描述数据的格式。这些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代码包含在<% %>中。