为什么即使它测试的方法没有代码,我的测试也会通过?
Why do my tests pass even though the method it tests has no code?
我觉得我可能写错了这些测试,因为它们做的太多了。它们在我 运行 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 的事情是错误的。
或者我现在应该做其他事情让它们失败,然后添加使其通过的代码?
invited_user = @users.select { |u| u[:email] == controller.params[:email] }
expect(invited_user.first).to be_a(User)
这是您的问题:@users 正在您的测试设置中设置(块前)
因此,您基本上是在断言该用户在已创建用户 (@users) 的集合中,这显然是这种情况。
更正确的方法是检查用户的响应对象或检查控制器中分配的实例变量(您可以使用分配方法来完成此操作,更多here
我觉得我可能写错了这些测试,因为它们做的太多了。它们在我 运行 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 的事情是错误的。
或者我现在应该做其他事情让它们失败,然后添加使其通过的代码?
invited_user = @users.select { |u| u[:email] == controller.params[:email] }
expect(invited_user.first).to be_a(User)
这是您的问题:@users 正在您的测试设置中设置(块前) 因此,您基本上是在断言该用户在已创建用户 (@users) 的集合中,这显然是这种情况。
更正确的方法是检查用户的响应对象或检查控制器中分配的实例变量(您可以使用分配方法来完成此操作,更多here