`
PBFox
  • 浏览: 65976 次
  • 性别: Icon_minigender_1
  • 来自: China
文章分类
社区版块
存档分类
最新评论

rubyonrails 自定义rake任务

阅读更多
在使用rake的过程中我们感觉到了rake的强大,当然我们也可以自定义一个rake.

1.新建一个工程unit_test

2.执行
script/generate model User

Rails 环境不仅创建了模型,还创建了迁移、测试用例和测试 fixture。迁移让 Rails 开发人员可以在整个开发 过程中处理数据库表中不可避免的更改.然后编辑db/migrate/001_create_users.rb.添加需要的列.我的是:
def self.up
create_table :users do |t|
t.column :login, :string
t.column :firstname, :string
t.column :lastname, :string
t.column :password, :string
end
end

def self.down
drop_table :users
end

3.创建数据库
mysql> create database unit_test_development;
mysql> create database unit_test_test;

4.执行rake db:migrate

5.执行script/generate scaffold User user

6.对unit_test进行单元测试 ruby test/unit/user_test.rb如果测试用例通过,会得到 “.” 字符。如果测试用例产生错误,会看到 E。如果某个断言不是 true,那么将看到 F
但是测试太简单,所以是构建一个真正的测试用例的时候了。请在test/unit/user_test.rb中添加新的测试用例:
def test_new
users=User.find(:all)
User.new do |user|
user.login="aaa"
user.firstname="a"
user.lastname="aa"
user.password="123456"
user.save
end
result=User.find_by_login("aaa")
assert_equal "aa", result.lastname
assert_equal users.size + 1, User.find(:all).size
assert_equal "a", result.firstname
end
重新执行ruby test/unit/user_test.rb.你就会看到想要的测试结果了.

7.现在要制作一个测试 fixture 并为它编写一个测试。请编辑 test/fixtures/user.yml 文件,添加几个记录:

one:
id: 1
login: aa
firstname: a
lastname: aa
password: 123456
two:
id: 2
login: ddd
firstname: d
lastname: ddd
password: 654321

同样,还要把这个测试用例添加到user_test.rb 中:

def test_find
assert_equal "aa",User.find(1).login
assert_equal "ddd",User.find(2).login
end
执行ruby test/unit/user_test.rb
8.下面进入正题.写自己的rake任务

添加 lib/tasks/load_data.rake.
load_data.rake如下:

desc "Load fixtures into development db"
task :load_fixtures_user_data => :environment do
require 'active_record/fixtures'
ActiveRecord::Base.establish_connection(:development)
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
puts 'loading ' + fixture_file
Fixtures.create_fixtures('test/fixtures', File.basename(fixture_file, '.*'))
end
end

desc "Create new user"
task :create_user => :environment do
user=User.new(:login=>"bbb",:firstname=>"b",:lastname=>"bb",:password=>"123456789")
user.save
puts "user create"
puts "login:bbb"
puts "password:123456789"
end

desc "Clear existing data, then load development data so the developers have something to work with"
task :load_data => [:environment,'db:schema:load',:load_fixtures_user_data,:create_user]

这样我们就可以用rake:load_data来创建表并且把.../fixtures/user.yml中的数据载入到表中.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics