shoulda-matchers--Ruby单元测试小帮手

详细文档大家可以点击github的官方说明,不过是英文版本哦

https://github.com/thoughtbot/shoulda-matchers

shoulda-matchers provides Test::Unit- and RSpec-compatible one-liners that test common Rails functionality. These tests would otherwise be much longer, more complex, and error-prone.

shoulda-matchers对应了可以测试Rails常规功能的方法,使得测试用例非常简洁高效

如何安装使用?

(1)把下面的几行加到Gemfile文件里

group :test do
  gem ‘shoulda-matchers‘, require: false
end

其中require:false表示不自动加载
(2)修改spec_helper.rb,加上下面两行
require ‘rspec/rails‘
require ‘shoulda/matchers‘

下面来看一下匹配的内容

ActiveModel Matchers

ActiveRecord Matchers

ActionController Matchers

重头戏就是下面的例子啦

# -*- encoding : utf-8 -*-
class CmsUser < ActiveRecord::Base
  validates_presence_of :email
  validates_uniqueness_of :email

  def password=(password)
    write_attribute :password, self.class.md5(password)
  end

  def self.authenticate(username, password)
    CmsUser.where(username: username, password: md5(password)).first
  end

  def self.md5(str)
    Digest::MD5.hexdigest(str.to_s)
  end
end

看下对应的cms_user_spec.rb测试

# -*- encoding : utf-8 -*-
require ‘spec_helper‘
describe CmsUser do
  describe "validations" do
    it { should validate_presence_of(:email) }
    it { should validate_uniqueness_of(:email) }

    it "valid" do
      user = build :cms_user
      user.should be_valid
    end
  end

  describe "set password" do
    it "value will convert to md5" do
      user = build :cms_user
      user.password = "password"
      user.password.should eq Digest::MD5.hexdigest("password")
    end
  end
  describe "authenticate with username and password" do
    let!(:tester) { create :cms_user, username: "user", password: "password" }

    it "return user with valid user info" do
      user = CmsUser.authenticate tester.username, "password"
      user.id.should eq tester.id
    end

    it "return nil with invalid user info" do
      user = CmsUser.authenticate tester.username, "wrong_password"
      user.should be_nil
    end
  end
end
时间: 2024-10-15 01:35:38

shoulda-matchers--Ruby单元测试小帮手的相关文章

【玩转rom助手】专属刷机的小帮手

对于一个普通的安卓手机用户而言,伴随着官方系统版本的更新,几乎都避免不了要学习如何刷机.因为刷机是手机附赠的一大乐趣,同时也是非常有效的升级方法,而一般刷机用户大多都有刷机综合症,不刷不爽.因此选择好的刷机辅助工具,拥有专属个性的刷机包也是非常重要的,以便减少刷机过程中不必要的错误和麻烦,做到事半功倍. 倘若刷机不借用任何辅助工具,对于刷机者们来讲,我不知道会怎样,但对于我来说那是不切实际的,也不能说这是对第三方工具的依赖,只能更恰当的描述为,刷机软件的横空出世,给我们带来的是更便捷的通道之一.

移动广告聚合平台KeyMob小帮手

国内市场如哇棒.有米.艾德思奇.芒果.架势无线,微云此类广告平台的出现,增加了这个移动广告的崛起,对于开发者来说是个好消息,但是要想选择一个好的平台却是开发者的一个难题.由Android.IOS开发者团队的KeyMob小帮手的上线,彻底解决现在开发者所遇到的这个难题. KeyMob小帮手是一个帮助移动应用开发者嵌入多家优秀的广告平台的免费管理工具.通过它,您可以自由设定每个广告平台的比例.优先级等,从而实现广告收益的最大化. 目前KeyMob小帮手支持多家广告平台,包括百度广告,admob广告,

KeyMob小帮手使手机应用也可以赚更多广告收入

众所周知,真正吸引用户的不是手机本身,而是承载在其上的丰富的应用.APP Store模式的赚钱效应,吸引了无数的开发者投入到 Android.IOS应用的开发中.但一个不争的事实是,国人喜欢免费的应用,这决定了在APP Store收费模式在国内难有市场,因此开发者通过嵌入广告收取广告分成是获得收入的最好来源.于是2010年国内众多移动广告平台与移动广告聚合平台应运而生,为国内开发者提供了另一种赚钱方式:广告嵌入. 2014年KeyMob团队开发了10多款免费手机应用,计划通过嵌入广告获利,先后嵌

gdb小帮手

在LINUX下干活基本不要指望着像在WIN下干活那么舒服. 不同的版本和不同的库都可能会引起各种不同的错误现象.一定要有心理准备. (gdb) p *pid$15 = {id = 7, feature_offset = -1, feature = "&usr=", '\000' <repeats 24 times>, feature_len = 0,   type = 0 '\000', result_offset = 4, result_len = 32, pro

C#单元测试小例子

步骤简略,特别处进行说明. 以VS2015为例. 1.创建一个解决方案方案,如添加一个ConsoleApplication1的解决方案. 2.在解决方案的默认项目中,添加一个Calc类 3.将Calc设置成public,然后添加一个静态方法. public class Calc { public static int ADD(int a, int b) { return a + b; } } 4.在ADD的方法上,点右键[创建单元测试],在弹出的对话框中,选择[测试项目名]和[输出文件],其他内

Python做单元测试小实例

import sys#先定义一个函数,这个函数是计算高*宽,并返回计算结果def test(hight,width):    return hight*width #这是程序启动函数入口,给要测试的函数传两个参数(hight,width),得到一个返回结果answer.拿到这个返回结果answer,与预期结果cerrect_answer进行比较,如果一致则打印通过,不一致则打印失败.if __name__ == '__main__':    hight=12    width=2    cerr

ActivityTask: Android上的Async/Await小帮手

在谷歌开发者大会上,Xamarin组的几个团队成员出席了生命周期的架构组件座谈 (推荐你看看).虽然提出的解决方案很有趣,但在某些情况下,映射到我们在.NET中已经拥有的模式,它的共鸣与我们这些人因为这些Android生命周期细节让一个特定的C #特征使用较为繁琐: async/await. 对于 async/await,Android开发者有两个主要的挑剔点: 因为Android资源系统的工作方式,配置的更改(如屏幕旋转)将在默认情况下重新创建Activity实例. 因为在Activity生命

小猿圈之python实用的几款开发工具

随着python技术的不断发展,开发的速度,数据的处理,编辑器都有很多,真正实用的却不多见,一个好的开发工具,会大大提高开发者的速度,帮程序员解决难题,下面小猿圈加加介绍几款好用的开发工具,有的工具你是否在用呢?一起来看看吧! 作为一个python的入门者,除了掌握这么语言的基本要领外,一款好的python开发工具是必不可少的. 1.github Git是一个分布式的版本控制系统,最初由LinusTorvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤

微信小程序推荐

工具类 快递100助手:查快递,寄快递. 驾考帮手:为您提供科目一.科目四的测试题练习. 翻译e:多国语言在线翻译,中英.中日.中俄.中法快速翻译,专业翻译. 朝夕日历Pro:一个日历管理 app,你在这里能简单地安排日程. 蚂蚁待办:简洁的待办.提醒小程序. 城市天气预报:天气查询小程序,目前支持 300 个城市最近 5 天天气的查询. 实时空气质量:提供全国各地实时空气质量,帮你避免空气污染带来的损害. 黄历万年历:为你提供祈福.纳财.嫁娶等吉日查询服务. 旅游类 去哪儿酒店:两步即可预定酒