为什么我的测试通过,即使它测试的方法没有代码?

时间:2015-10-23 08:39:58

标签: ruby-on-rails ruby-on-rails-4 rspec tdd rspec3

我觉得我可能写错了这些测试,因为他们做的太多了。它们在我运行rspec时工作并通过,即使该方法为空。

这是我的规范 - invitations_controller_spec.rb

describe 'POST #create' do
    context 'when invited user IS an existing user' do
        before :each do
          @users = [
            create(:user),
            create(:user),
            create(:user)
          ]
        end

        it 'correctly finds User record of invited user' do
          login_user
          post :create, { email: @users.first[:email] }
          invited_user = @users.select { |u| u[:email] == controller.params[:email] }
          expect(invited_user.first).to be_a(User)
        end
    end    
end

在我的控制器中我有:

def create

end

当我运行rspec时,我明白了:

Users::InvitationsController
  POST #create
    checks to see if invited user is an existing user

全绿。我很高兴它通过,但我觉得我接近这个TDD的事情是错误的。

或者我现在应该做些什么来让它们失败,然后添加让它通过的代码?

1 个答案:

答案 0 :(得分:1)

invited_user = @users.select { |u| u[:email] == controller.params[:email] }
expect(invited_user.first).to be_a(User)

这是您的问题:@users正在您的测试设置中设置(在块之前) 所以你基本上断言用户是在创建用户的集合中(@users),显然就是这种情况。

更正确的方法是检查用户的response-Object或检查控制器中指定的实例变量(可以使用assigns-method执行此操作,更多here