原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/04/10/testing-rails-app/
这里直接拷贝过来的,就不在另外排版了。
还有其他几篇关于rails测试摘录总结的博文地址:
一直都在回避测试,直接写功能,总觉着写测试代码挺别扭的不好写,但逃避不是办法。在社区中混的时间越长,越能发现越来越多的招聘贴都有写测试的要求,可见测试的重要性。在实际的开发过程中,功能一多,通过手动测试是很难每次考虑全面,测试也是比较重复的工作,不可能每次增加功能就手动将所有的测试都重新测一遍,以保证项目ok(对以前的功能也没影响)。那如何去避免这样的情况呢,那就只能通过测试去增加自己对自己代码的信心。
这里先简单介绍下以下两个工具的简单使用,在以后的博客中做继续的补充。
rspec: BDD 测试框架, 替代 Rails 默认的 TestUnit
factory_girl: 用于方便的创建测试数据, 替代 Rails 默认的 Test Fixture
1.创建rails项目
rails new example -T
或者
rails new example --skip-test-unit --skip-bundle
忽略原先的 Rails 默认的 TestUnit
2.配置
gem_group :development, :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
end
bundle install
config/application.rb
class Application < Rails::Application
config.generators do |g|
g.fixture_replacement :factory_girl
g.test_framework :rspec, :fixture => true
end
.....
end
初始化rspec
rails generate rspec:install
这个命令会创建两个文件:
.spec 保存运行 rspec 时的需要使用的选项;
spec/spec_helper.rb 是 rspec 的加载和配置文件。
在rspec中加入factory-girl
RSpec.configure do |config|
.....
# Mix in FactoryGirl methods
config.include FactoryGirl::Syntax::Methods
.....
end
这样在spec测试代码中,我们就可以直接调用FactoryGirl的方法
3.简单的测试案例
rails scaffold book name:string publishing_house:string pages:integer ISBN:string content:text
如果照上面配置好之后,你就能发现执行这个命令后,会默认生成一些测试的模板(也可以在application.rb中指定生成那些测试模板),我们可以在那个上面再做修改。
然后执行数据库迁移命令和测试准备命令:
rake db:migrate
rake db:test:prepare # 在数据库结构发生变化时, 需要执行这句来保证用 rspec 执行测试时不会出错
修改测试用的数据
FactoryGirl.define do
factory :book do
name "Aglic Web Development with Rails"
publishing_house "DHH"
pages 500
ISBN "978-7-121-11096-2"
content "MyText"
end
end
测试需求:name不能为空,不能重复
require 'spec_helper'
describe Book do
let(:book) { build :book }
it "passes validation with all valid informations" do
expect(book).to be_valid
end
context "fails validation" do
it "with a blank name" do
book.name = ''
expect(book.save).to be_false
end
it "with a duplicated name" do
create :book, :name => book.name
expect(book.save).to be_false
end
end
end
此时跑下测试rspec spec/models/book_spec.rb, 此时你会发现测试没通过(能通过才有鬼呢,哈哈)。
这时就可以修改你的model了,来达到你原先想要达到的目的
class Book < ActiveRecord::Base
# attributes
attr_accessible :ISBN, :content, :name, :pages, :publishing_house, :cover
# validation
validates :name, :uniqueness => true
validates :name, :presence => true
end
此时再跑测试时,你会得到这样的效果:
Rack::File headers parameter replaces cache_control after Rack 1.5.
...
Finished in 0.8842 seconds
3 examples, 0 failures
总算是通过了,接下来可以自己试试加点其他的。
4.执行测试的方式
在 Rails 应用执行 rspec 测试有两种方式: 使用 rake 命令. 示例:
rake test # 执行所有测试, 也可以用 rake spec, 或直接用 rake
rake spec:models # 执行 spec/models 下面的测试
rake spec:helpers # 执行 spec/helpers 下面的测试
rake spec:requests # 执行 spec/requests 下面的测试 (验收测试)
第一次执行这个命令时, 有可能会提示要先执行 rake db:migrate. 使用 rspec 命令. 示例:
rspec # 执行 /spec 下所有的 "*_spec.rb" 文件, 即执行所有测试
rspec spec/models # 执行 spec/models 下面的测试
rspec spec/helpers # 执行 spec/helpers 下面的测试
rspec spec/models/post_spec.rb # 只测试一个文件
rspec spec/models/post_spec.rb:7 # 只执行这个文件第7行所在的单个测试 (每个 "it" 块是一个测试)
原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/04/10/testing-rails-app/
这里直接拷贝过来的,就不在另外排版了。
还有其他几篇关于rails测试摘录总结的博文地址:
相关推荐
In this completely revised edition, you'll learn why testing works and how to test effectively using Rails 4, Minitest 5, and RSpec 3, as well as popular testing libraries such as factory_girl and ...
:gem_stone: 具有devise,JWT,graphQL,CanCanCan和RailsAdmin的Rails 6样板。 这是构建下一个SaaS产品的样板。 这是RubyOnRails 6后端,具有身份验证,GraphQL API,角色和能力管理以及管理仪表板。 它与使用...
虚假示例 将与RSpec一起使用以测试Rails应用程序的示例。如何1.将PusherFake JS用于Pusher JS实例。 < script > <% if defined? ( PusherFake ) %> // Test environment. // // Note: Ensure output is...
In spec/rails_helper.rbrequire 'pig_ci'PigCI . start配置阈值配置阈值将使您的测试套件无法在CI中失败。 您将需要根据您的应用程序配置阈值。 # In spec/rails_helper.rbrequire 'pig_ci'PigCI . start
认证API Ruby版本2.3.1 系统依赖rspec-rails factory_girl_rails shoulda_matchers 骗子database_cleaner jwt 加密配置关于短信的配置sms: company: 云片网 expires_in: 3600 # second数据库创建sqlite3 如何运行...
社区Ruby,Minitest,Rails和RSpec指南的同伴博客。 在更新指南之前,主要用于讨论各种(有争议的)想法。 该博客的另一个目的是为各种样式指南中概述的指南提供更多的理由。 欢迎任何人对此博客发表文章。
20周内有20个Web应用程序 您好,欢迎来到我的20挑战20资料库。 此仓库将包含在此20周的视频系列过程中...•第14周-快速迭代–通过在Ruby On Rails中使用Rspec TDD减少错误的发生6 影片教学 博客教程 •第15周-使用Axio
Ruby on Rails中的Internet DEMO商店实施符合以下要求的Internet商店DEMO: User authentication and authorization;User roles (guest, registered user, admin);Product categories menu;Product cart available ...
layout application flow $ rails generate rspec: install 启动服务器$ bundle exec rake db: migrate $ bundle exec rails s ($passenger start) 访问重置宝石见 $ gem uninstall -I -a -x --user-in
:bust_in_silhouette: 伊丽莎白·比利亚莱霍斯(Elizabeth Villalejos) :handshake: 贡献 欢迎提供文稿,问题和功能要求! 随时检查。 表示支持 给一个 :star: 如果您喜欢这个项目! “您今天可以采取什么简单...
回归器 Regressor是基于回归的测试工具。 什么是回归测试? 。 您可以根据ActiveRecord模型生成规格。...# If the regressor gem is inside a group wrap your initializer in # if defined?(Regressor) d
是的matlab代码Java2Ruby的 给出了二进制树的非常简单的Java实现。 使用文件名“ binary-tree.rb”和类名“ ...in 0.00633 seconds 1 example, 0 failures “。”代表成功完成测试。 您可以在找到有关RSpec的更多信息。
## CoverMyMeds Ruby on Rails培训计划我们为您提供成为一名成功的...使用RSpec,Cucumber和水豚进行测试 辛纳屈介绍 Rails组件:会话,路由,安全性和关键帮助器方法 CoverMyMeds专用工具和材料 ##课程设置 #
- 奖励您的员工!... 在 Heroku 上直播 -使用的技术Rails Ruby Javascript jQuery CSS Postgres 测试:RSpec、Capybara工作清单 设置 Rails 应用 制定接下来两天的计划 使用 Ruby 和 Postgres 构建后端 前端设
生成的类应能够按以下方式使用,并且还应符合此处随附的RSpec规范。 笔记 覆盖method_missing方法,并使用它来拦截对不存在的方法的调用。 每个不存在的方法都应成为标准的HTML标记: 例子 require 'xhtml_builder' ...
为 Dev Bootcamp 学生简化向 Rails 的过渡快速开始bundle install shotgun config.ru 根据需要,使用rake任务创建模型和迁移: rake generate:migration # Create an empty migration in db/migrate, e.g., rake ...
为 Dev Bootcamp 学生简化向 Rails 的过渡快速开始bundle install shotgun config.ru 根据需要,使用rake任务创建模型和迁移: rake generate:migration # Create an empty migration in db/migrate, e.g., rake ...
如果您正在寻找使用此框架构建的示例应用程序,请查看分支,其中包括基本的 CRUD 和 RSpec 测试。 目的 辛纳屈骷髅: 为构建挑战或创建新的 Sinatra 应用程序提供基础。 展示了一套围绕构建 Sinatra 应用程序的...
如果您正在寻找使用此框架构建的示例应用程序,请查看分支,其中包括基本的 CRUD 和 RSpec 测试。 目的 辛纳屈骷髅: 为构建挑战或创建新的 Sinatra 应用程序提供基础。 展示了一套围绕构建 Sinatra 应用程序的...
如果您正在寻找使用此框架构建的示例应用程序,请查看分支,其中包括基本的 CRUD 和 RSpec 测试。 目的 辛纳屈骷髅: 为构建挑战或创建新的 Sinatra 应用程序提供基础。 展示了一套围绕构建 Sinatra 应用程序的...