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方法 add 到示例对象中。在顶部修补自定义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
于 2013-07-06T18:10:41.510 回答