我觉得我可能写错了这些测试,因为他们做的太多了。它们在我运行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的事情是错误的。
或者我现在应该做些什么来让它们失败,然后添加让它通过的代码?
答案 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