总结 | 如何测试你自己的 RubyGem
2015-07-07 15:05
645 查看
如何测试一个Gem
gem 开发完了,想要给别人用,那就需要测试啊,测试一个 gem 其实很简单,这里我们用 minitest 为例, rspec 也一样适用。先来看看我们当前这个 gem 的目录结构:-rw-rw-r-- 1 lizhe lizhe 90 7月 2 15:52 Gemfile -rw-rw-r-- 1 lizhe lizhe 379 7月 3 10:09 Gemfile.lock drwxrwxr-x 3 lizhe lizhe 4096 7月 2 15:52 lib -rw-rw-r-- 1 lizhe lizhe 1062 7月 2 15:52 LICENSE.txt -rw-rw-r-- 1 lizhe lizhe 923 7月 3 10:09 mygem.gemspec drwxrwxr-x 2 lizhe lizhe 4096 7月 2 18:33 pkg -rw-rw-r-- 1 lizhe lizhe 187 7月 3 10:35 Rakefile -rw-rw-r-- 1 lizhe lizhe 556 7月 2 15:52 README.md
打开 mygem.gemspec ,添加
minitest:
spec.add_development_dependency "minitest", "~> 5.7.0"
执行
bundle install安装
minitest。
新建一个
test文件夹,存放我们的测试的用例,然后新建一个
test_helper.rb文件,放在里面。
test_helper.rb的内容如下:
$LOAD_PATH << "./lib" # 把lib添加到load path require 'minitest/autorun' # 引进minitest require 'mygem'
再来新建一个测试用例,
test_mygem.rb:
require "test_helper" class MygemTest < Minitest::Test def test_hello_output assert_equal(Mygem.hello, "hello from my gem") end end
现在就来执行测试吧:
$ ruby test/test_mygem.rb /home/lizhe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- test_helper (LoadError) from /home/lizhe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require' from test/test_mygem.rb:1:in `<main>'
出错了!找不到
test_helper,因为它没有在加载路径里嘛,那就来换个方式,
require_relative 'test_helper',因为我们的命令是在 gem 根目录下的,所以相对路径就是当前的路径,如果是在 test 目录下执行,就需要写成
require_relative '../test_helper'了,还挺麻烦。好,执行一下试一试:
$ ruby test/test_mygem.rb Run options: --seed 30741 # Running: . Finished in 0.000793s, 1260.9959 runs/s, 1260.9959 assertions/s. 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
利用 Rake::TestTask 简化测试流程
前面的测试方法中,我们要手动添加 lib 目录到 load path ,然后在每个测试用例文件中要require_relative 'test_helper',很是麻烦,现在来简化这一个流程。
首先添加
Rake::TestTask到
Rakefile中:
require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' << 'lib' t.pattern = "test/test_*.rb" end
现在把 testhelper 中的
$LOADPATH << './lib'去掉,再把测试用例文件中的
require_relative替换为
require,因为
rak test task已经把 test 和 lib 两个目录都添加到 load path 中了,然后执行
rake test:
$ rake test Run options: --seed 29947 # Running: . Finished in 0.000969s, 1031.6447 runs/s, 1031.6447 assertions/s. 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
进一步简化,每个测试用例文件都要
require 'test_helper',也是够麻烦的,能不能让它自动执行这个动作呢?可以,只需要再加上一个选项即可:
require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' << 'lib' t.pattern = "test/test_*.rb" t.ruby_opts << "-r test_helper" # 添加ruby运行参数,require指定的文件 end
现在把测试用例中的
require 'test_helper'这一行也去掉,执行
rake test,同样可以运行测试,又少写了一行,:smile :
现在来设置默认的 task :
require 'rake/testtask' Rake::TestTask.new do |t| t.libs << 'test' << 'lib' t.pattern = "test/test_*.rb" t.ruby_opts << "-r test_helper" # 添加 ruby 运行参数,require指定的文件 end task :default => :test
这样我就可以直接执行 rake 就可以跑测试了,连那个 test 都省了。
如果我们有多个测使用例,这个 rake test task 会跑所有测试,如果想跑指定的某一个怎么做呢?指定一个 TEST 参数即可:
rake test TEST=test/test_mygem.rb
参考链接:
Rake::TestTask
本文系OneAPM工程师李哲原创文章。想阅读更多技术文章,请访问OneAPM官方技术博客。
相关文章推荐
- 总结 | 如何测试你自己的 RubyGem
- 如何测试你自己的 RubyGem?
- 如何开发一个自己的 RubyGem?
- Ruby on Rails Tutorial 第三章 静态页面
- ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法
- 解决Ruby在IE11中报Unable to get browser (Selenium::WebDriver::Error::NoSuchWindowError)的错误
- Ruby on Rails Tutorial 第二章 之 微博资源
- Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST
- ruby里面的属性访问器
- ruby里面module和class的区别
- 如何在 OS X 中安装 ruby
- Ruby用法总结
- Windows环境搭建Web自动化测试框架Watir(基于Ruby)
- Ruby(Selenium / Rspec)在Windows 8_64上安装步骤
- ruby简单的基本 6
- 如何以非 root 用户将应用绑定到 80 端口-ssh 篇 » 社区 » Ruby China
- 使用 Capistrano 和写作 Ruby 迭代边缘部署
- 在ruby 2 和rails 4 里面使用send_file 下载文件的时候。在IE下面中文名出现乱码的处理方式
- ruby的入门基础
- ubuntu安装Ruby on rails