[英]Rspec, multiple assertions over the same code
我正在嘗試檢查同一執行過程中的多個條件,在這種情況下,它只是一個post( :create , user: user.attributes )
但我想總體上知道什么是最佳方法。
這是完整的例子
describe UsersController do
describe 'CRUDL' do
describe 'create' do
let(:user) { User.new(username: "created") }
let(:response) { post( :create , user: user.attributes ) }
it 'should respond with created(201) http message' do
response.code.should == "201"
end
it 'should increment total users count' do
expect{ response }.to change{User.count}.by(1)
end
end
end
expect{ response }.to change{User.count}.by(1)
部分似乎不正確。 在同一代碼執行上測試許多斷言的正確方法是什么?
請注意,如果您使用的是rspec-rails,示例對象中已經添加了一種response
方法。 在頂部修補自定義的let
可能會導致難以調試錯誤。
話雖這么說,這些測試沒有任何問題。 您應該僅按規格測試一件事。 expect{}.to change{}
部分可能看起來很奇怪,因為let(:response)
既是您要測試的動作,又是響應對象的存儲。
具有以下內容可能更直觀:
describe 'CRUDL' do
context 'creating a user' do
let(:normal_user) { User.new(username: "created") }
def create_user(user)
post( :create , user: user.attributes )
end
it 'responds with created(201) http message' do
create_user normal_user
expect(response.code).to eq '201'
end
it 'creates the user' do
expect{ create_user normal_user }.to change{User.count}.by(1)
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.