0

同じ実行で複数の条件をチェックしようとしていますが、この場合は単なる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)部品が正しくないようです。同じコード実行で多くのアサーションをテストする正しいアプローチは何でしょうか?

4

1 に答える 1

1

注意点として、rspec-rails を使用している場合はresponse、example オブジェクトにメソッド add が既に存在します。カスタムにパッチを適用するletと、デバッグが困難なエラーが発生する可能性があります。

そうは言っても、これらのテストに問題はありません。仕様ごとに 1 つのことのみをテストする必要があります。あなたがテストしたいアクションと応答オブジェクトのストレージの両方であるため、この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
于 2013-07-06T18:10:41.510 に答える