-安裝
- 添加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