簡體   English   中英

Rspec,同一代碼上的多個斷言

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM