天天看點

[ruby on rails]Rspec的使用

-安裝

  • 添加gem
group :development, :test do
  gem 'capybara'  #內建測試用的
  gem 'rspec-rails' 
end
           
  • 生成
$ rails generate rspec:install
           

-使用

1. describe/ context /it 角色差別

describe “描述”一組測試

context 通常用來表示不同的狀況,如“當”使用者是管理者,“使用者有某某某屬性”,或者if…else等

it 用來寫一條具體測試用例

2. describe起名字

class Ruby
  def initialize(programmer)
  end

  def self.goal
    "make programmer happy"
  end

  def happy?
    true
  end
end

# foo/programmer.rb
class Programmer
end

# foo/ruby_spec.rb
require_relative "./ruby"
require_relative "./programmer"

RSpec.describe Ruby do
  describe ".goal" do
    it { expect(Ruby.goal).to eq "make programmer happy" }
  end

  describe "#happy?" do
    it "yes, always happy" do
      programmer = Programmer.new

      rubyist = Ruby.new(programmer)

      expect(rubyist.happy?).to eq true
    end
  end
end
           
  • 類别方法的測試,使用一個點(.),加上方法名稱:.method_name來引用。
  • 實體方法的測試,使用一個井号(#),加上方法名稱:#method_name來引用。

3.expect後面跟 ( ) 還是 { }

  • 數值用括号
expect(1 + 1).to eq(2)
           
  • 一段代碼用{ }
expect { User.create! }.to change(User.count).by(1)
           

4.Matcher方法

  • 檢查相等
expect(expression_1).to eq(expression_2)
           
  • 檢查是否抛出錯誤
expect { obj.some_method_not_exists }.to raise_error(NoMethodError)
           
  • 檢查狀态變更
expect { User.create! }.to change(User.count).by(1)
           
  • 所有的Matcher見:https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers

繼續閱讀