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

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

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正合适。

  1. require 'test_helper'
  2. class Admin::TagsControllerTest < ActionController::TestCase
  3. include FactoryGirl::Syntax::Methods
  4. def setup
  5. @user_valid = create(:user_valid)
  6. @request.session[:user_id] = @user_valid.id
  7. end
  8. def teardown
  9. @user_valid = nil
  10. end
  11. def test_should_create_tag_successfully
  12. tag = build(:tag_valid)
  13. assert_difference "Tag.count" do
  14. post :create, {:tag => { :title => tag.title}}
  15. end
  16. end
  17. def test_should_create_tag_fail
  18. assert_no_difference "Tag.count" do
  19. post :create, {:tag => { :title => ""}}
  20. end
  21. end
  22. end

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

  • a block
  • a method
  • a method name as a symbol
  • a lambda
  1. setup :init
  2. teardown do
  3. @user_valid = nil
  4. end
  5. private
  6. def init
  7. @user_valid = create(:user_valid)
  8. @request.session[:user_id] = @user_valid.id
  9. end

测试routes

  1. assert_routing(
  2. "signout",
  3. {:controller =>"sessions", :action =>"destroy", :method => :delete}
  4. )
  1. def test_route_posts_id
  2. category = FactoryGirl.create(:category_valid)
  3. article = FactoryGirl.create(:post_valid)
  4. assert_routing("posts/#{article.id}", {:controller =>  "posts", :action => "show", :id => article.id.to_s })
  5. end

转载于:https://blog.51cto.com/virusswb/1079484

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

  1. [测试十年]第一年要get哪些技能?

    有一句话说,如果人生倒着走,人们会避免很多错误,成为了不起的人. 人的一生,25岁之前在上学读书,25-55/60岁在工作,有个著名理论将职业生涯分为三个十年,你去搜索"职场三个十年&quo ...

  2. Rails测试《一》fixtures简介

    简介 每个rails应用都包括三个环境: 生产环境 开发环境 测试环境 我们的测试就是跑在测试环境,如果测试涉及数据库,会在测试数据库进行操作.这样不会对生产环境和开发环境的数据造成影响. 我们先使用 ...

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

    讲到测试邮件发送程序,我们首先要让系统可以发送邮件.我们先来给系统添加发送邮件的功能. Action Mailer in Rails 3是一个不错的视频教程,大家可以参考. 还有就是http://gu ...

  4. Rails测试《二》单元测试unit test

    单元测试 单元测试针对model,主要是测试model中的业务规则,测试model中的验证validates规则. 单元测试的文件存放在test/unit文件夹,针对user的model的单元测试文件 ...

  5. 测试十年的前辈工作心得与经验分享

    前言 由于各种原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux等. 长江后浪推前浪,前浪死在沙滩上",曾经一句让人会心 ...

  6. 测鬼记(上)——测试(十二)

    十二.测试 第二日醒来,文字按往日的作息时间到了培训室,还未到上班时间,里面也没有几个人.深秋已临,深圳的天气依然闷热,早上走几步路衣裳都被汗湿了. 文字喜欢上班前培训室里的那份难得的宁静,虽然偌大的 ...

  7. 新零售讲堂之十年前错过了电子商务,十年后凭什么还要错过新零售!...

    伴随互联网的快速发展,电子商务的迅速崛起,传统行业纷纷走向落寞.部分纯粹的传统企业已经是举步维艰,众多传统企业老板开始对互联网有了新的认知和态度,从一开始的抵触到慢慢接受,但由于对互联网本质的认知不够 ...

  8. 程序员,你的逻辑思维有多强(一道推理题测试,不可错过)

    要做一个程序员,逻辑思维能力是关键,写程序也是对该能力的一种锻炼,这里有一个测试题,你可以对自己现在的能力进行评诂.也希望大家回贴谈谈感受. 本题是柏林大学的一次考试题,要求在30分钟内做出,不过只有 ...

  9. [测试十年]搜狗测试第一年:责任心篇

    前文回顾 小明已经入职一年多了,他先后从娜娜那里学会了细心.融入团队.主动反馈.主动学习.沟通方法等工作方法,这极大地帮助了小明,他已然从新人慢慢成长为独挡一面的顶梁柱,但是相比娜娜还是差那么一点,究 ...

最新文章

  1. 我的世界java8_《我的世界》java8 64服务器mod
  2. 百度人脸搜索的一次尝试(JAVA)
  3. (十五)WebGIS中平移功能的设计和实现
  4. uboot引导linux内核,u-boot启动内核的几种方式
  5. 这个是什么单机经典模式的引入
  6. golang搭建静态web服务器的实现方法
  7. mysql最多多少slave_MySQL5.7主从,单slave多master
  8. aria-hidden读屏
  9. SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
  10. [转帖]浪潮openstack的逆袭
  11. 百度坐标拾取html,百度地图API获取地址拾取坐标代码
  12. 跑语义分割程序时报错
  13. SpringBoot工程接入第三方支付渠道支付宝(C扫B支付)
  14. python flask上传Excel并把Excel的数据导入数据库
  15. pc端页面右侧滑动样式修改
  16. Unity UGUI中两点之间连线的通用实现
  17. 虚拟机(VMware Workstation Pro15)及系统(Windows10)安装
  18. 关于什么是大数据智能决策!摘自《大数据智能决策》自动化学报
  19. 淘宝 聚划算 整点免费 支付宝延时时间1秒
  20. 用计算机设计购物小票,商友星云系统软件票据和条码标签设计和打印

热门文章

  1. Lock(ReentrantLock)实现线程同步,线程安全
  2. 设计模式之单例模式8种实现方式,其五:懒汉式(线程不安全,同步代码块)
  3. java使用Post方式发送https请求的方法,直接可以用
  4. 对标Postman的ApiPost创始人:用户,是ApiPost唯一的信仰
  5. c语言if的时候自动转换,[求助]IF语句转换SWITCH语句写出!如何
  6. matlab cgf sc 未定义,matlab通用神經網絡代碼
  7. 【无标题】写博客的第一天
  8. raster | R语言中的空间栅格对象及其基本处理方法(Ⅳ):数据聚合、重采样
  9. lisp钢管_技术专栏集合管道模式(上)
  10. python写数据库校验_Python:生成验证码并插入到数据库!