Rails测试《十》不能错过的杂七杂八

今天来介绍一些杂七杂八的测试知识,但是它们是不能错过的。

首先来介绍一下常用的测试命令

rake test

运行包括单元测试、功能测试和集成测试在内的所有测试。

rake test:units

运行所有的单元测试。

rake test:functionals

运行所有的功能测试

rake test:integration

运行所有的集成测试。

rake test:recent

运行最近修改过的测试。

rake test:uncommited

运行所有未提交的测试。支持svn和git。

setup和teardown

在一个包含多个测试方法的测试类中,我们可能会包含一些在每个测试运行之前和之后都需要做的工作,都需要执行的一些代码。

比如说创建对象,清理对象之类的。集中在一起便于维护,便于修改,便于阅读。

这样的事情我们可以交给setup和teardown来做。setup就是中的代码在每个测试方法执行之前运行,teardown中的代码会在每个测试方法执行之后运行。

这里我们拿之前做过的一个针对Admin::TagsController的功能测试举例,引入setup和teardown。添加tag是需要登录的,会用到用户信息,需要session中有值,这部分在Admin::TagsController的所有action中都是需要的,而且使用相同就可以了,把这部分放在setup和teardown正合适。

require 'test_helper'

class Admin::TagsControllerTest < ActionController::TestCase
  include FactoryGirl::Syntax::Methods 

  def setup
    @user_valid = create(:user_valid)
    @request.session[:user_id] = @user_valid.id
  end 

  def teardown
    @user_valid = nil 

  end 

  def test_should_create_tag_successfully 

    tag = build(:tag_valid) 

    assert_difference "Tag.count" do
      post :create, {:tag => { :title => tag.title}}
    end
  end 

  def test_should_create_tag_fail 

    assert_no_difference "Tag.count" do
      post :create, {:tag => { :title => ""}}
    end
  end
end

而且rails还把setup和teardown实现为callback,这样你就可以通过下面的方式来指定setup和teardown。

a block

a method

a method name as a symbol

a lambda

setup :init 

 teardown do
   @user_valid = nil 

 end
 private
 def init
   @user_valid = create(:user_valid)
   @request.session[:user_id] = @user_valid.id
 end

测试routes

assert_routing(
                "signout",
                {:controller =>"sessions", :action =>"destroy", :method => :delete}
                )
def test_route_posts_id 

  category = FactoryGirl.create(:category_valid) 

  article = FactoryGirl.create(:post_valid) 

  assert_routing("posts/#{article.id}", {:controller =>  "posts", :action => "show", :id => article.id.to_s }) 

end

本文出自 “突破中的IT结构师” 博客,请务必保留此出处http://virusswb.blog.51cto.com/115214/1079484

查看本栏目更多精彩内容:http://www.bianceng.cn/Programming/project/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试
, 运行
, setup
, end
, create
tearDown
rails 测试、rails 单元测试、rails 测试 理解、rails 测试数据、rails 自动化测试,以便于您获取更多的相关知识。

时间: 2016-03-15

Rails测试《十》不能错过的杂七杂八的相关文章

测试十年-我难以逾越的困惑和痛苦和思考

很久没写文章了,之前的测试三年,测试六年都写了blog来记录自己的测试生涯和思考,这次测试10年肯定不会错过了,当然了,YY比较多,干货也不多,反正纪念下,或许我很难写测试15年的文章了.大家有任何问题,欢迎讨论,欢迎吐槽.   --- 10年测试的困惑和痛苦 转眼间参加工作10年了,也就是意味着干软件测试10年了,经历过3家公司,都有一些感悟,也难以相信我能在淘宝坚持了这么久,7年了,人家都说七年一痒,我的确是有一点痒了,但是没那么大,不管怎么样,还是会做一些改变吧,7月份初我会离开淘宝BU,

Rails测试《六》实战单元测试

用factory-girl替换fixtures来创建模拟数据2 上一篇我们介绍了factory-girl,这是一个很好的工具,可以用来替代rails中的fixtures,用来生成模拟数据. 它直观,易读,易读就易维护.最重要的一点是,它是面向model的,面向业务的,面向应用的,而fixtures模拟的数据是面向数据库的.但是我们的单元测试,功能测试,甚至将来要介绍的集成测试,都是面向业务的,从业务角度出发的测试,测试系统是否满足业务需求.所以好处显而易见了,相信大家在使用了以后会有一点感触.

Rails测试《五》实战单元测试

用factory-girl替换fixtures来创建模拟数据 fixtures 在前面我们介绍了,rails的测试系统默认使用fixtures来创建模拟数据,这些数据以yaml的格式书写,放在db/fixtures文件夹中,每个model都有一个对应的文件,test/fixtures/users.yml. 在测试启动的时候这些fixtures中的数据会加载到测试数据库,并且加载到变量中,供单元测试和功能测试使用. 使用fixtures有几个不利的因素,使得他们处于不利的位置. 最主要的一个因素是

Rails测试《四》实战单元测试unit test

之前的博客介绍了一些rails测试相关的知识.测试文件的位置,测试的类型,测试常用命令,以及可用的一些资源,以及如何利用fixtures生成模拟数据. 今天我们来实际的写一下单元测试,用到的知识主要是fixtures和unit test.fixtures用来模拟数据,unit test就是我们今天的主角-单元测试. 今天的代码将以blog项目为背景,为这个项目写一些单元测试. 这个项目的代码可以在https://github.com/woaigithub/blog获取到,而且项目已经部署到htt

Rails测试《三》功能测试functional test

功能测试functional test 在rails中,针对单个controller中的各个action进行的测试,叫做功能测试.controller处理web的请求,将请求的响应render到view中. 功能测试包括的内容 web请求是否成功? 用户是否被引导进入正确的页面? 用户是否成功的验证? 响应的模板中是否包含了正确的内容? 在给用户的view中是否显示了适当的内容? 功能测试分解 在使用rails g scaffold post或者rails g controller命令之后,会创

Rails测试《一》fixtures简介

简介 每个rails应用都包括三个环境: 生产环境 开发环境 测试环境 我们的测试就是跑在测试环境,如果测试涉及数据库,会在测试数据库进行操作.这样不会对生产环境和开发环境的数据造成影响. 我们先使用 rails new projects 命令来创建一个rails应用,默认会给我们创建一个projects目录,里面会包含一些默认的目录和文件.其中有一个文件夹test,里面将会放我们全部的测试相关文件. $ ls -F test/ fixtures/       functional/     i

Rails测试《十一》添加邮件发送程序及测试邮件发送程序

讲到测试邮件发送程序,我们首先要让系统可以发送邮件.我们先来给系统添加发送邮件的功能. Action Mailer in Rails 3是一个不错的视频教程,大家可以参考. 还有就是http://guides.rubyonrails.org/action_mailer_basics.html中更加详细的介绍. 添加邮件发送程序 发送邮件要保证我们有目标邮箱,所以呢,我们的用户要有一个属性:email. 还是拿我的blog项目作为练习项目. 我们在用户注册的时候给他发一封邮件. 首先我们创建一个初

Rails测试《九》集成测试integration test

开场白 今天我们来熟悉一下rails的集成测试integration test. 简介 集成测试主要是测试多个controller之间的交互,以及测试应用中比较重要的工作流程,验证这些工作流程是否符合预期的设想. 不像单元测试和功能测试,是自动添加的.集成测试是需要我们手动添加的,rails提供了一个命令 rails generate integration_test 通过命令就可以在test/integration文件夹创建集成测试. $ rails generate integration_

Rails测试《八》实战功能测试functional test2

今天继续我们的功能测试实战. 项目还是:blog,大家可以从github或者gitcafe中获取项目源码. 先来介绍一个断言 assert_difference(expression, difference = 1, message = nil, &block) http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html中比较详细的介绍. 再一次强烈推荐http://api.rubyonrails.org/,还