rspec create() 方法无效
rspec create() method not working
我正在开发类似 bento 的在线学习门户网站。对于解锁下一课的用户,他们必须至少审查其他用户提交的任何先前课程(由当前用户完成)的分配。考虑到这个逻辑,我有一个 rspec 测试,我测试了页面是否被重定向到其他用户的提交?为了通过测试,我必须创建虚拟提交。为此,我正在使用 create() 方法,但提交页面的重定向在测试中失败,但它在网站上运行良好。 submission_controller中负责重定向的代码是
def review_submission
@submission = Submission.where('lesson_id < ?', current_user.submissions.last.assignment.lesson_id.to_i)
.shuffle[1]
if @submission.nil?
redirect_to @assignment
else
redirect_to assignment_submission_path(assignment_id: @assignment.id, id: @submission.id)
end
end
测试代码为
it "redirects to submission path" do
admin_user = create(:admin_user)
sign_in admin_user
user = create(:user)
sign_in user
assignment = create(:assignment, admin_user_id: admin_user.id)
#I was creating dummy submissions data using rspec create method.
submission = create(:submission, lesson_id: 1)
post :create, params: { submission: attributes_for(:submission, user_id: user.id), assignment_id: assignment.id}
expect(response).to redirect_to assignment_submission_path( assignment_id: assignment.id, id: Submission.last.id)
end
虚拟数据来自 FactoryGirl
factory :submission do
user_id 1
assignment_id 1
lesson_id 2
content "this is the submission of my assignment"
factory :invalid_submission do
content ""
end
end
非常感谢任何建议。提前谢谢你。
看起来 @submission
是 nil,所以它会将您重定向到 Attachments#show
页面而不是 Submissions#show page
。您将其设置为:
@submission = Submission.where('lesson_id < ?', current_user.submissions.last.assignment.lesson_id.to_i).shuffle[1]
它正在尝试根据 current_user.submissions
查找提交。您的工厂正在提交如下内容:
submission = create(:submission, lesson_id: 1)
默认 user_id
为 1
,这可能不是您登录用户的 ID(因为您在其上方创建了管理员用户)。尝试将 user_id
传递给 FactoryGirl 创建的提交。实际上也可能想传入 assignment_id
,因此 Submission 将正确地属于 Assignment。
submission = create(:submission, lesson_id: 1, user_id: user.id, assignment_id: assignment.id)
然后应该将提交分配给您的用户,希望控制器能够找到它并且您的测试将通过。
我正在开发类似 bento 的在线学习门户网站。对于解锁下一课的用户,他们必须至少审查其他用户提交的任何先前课程(由当前用户完成)的分配。考虑到这个逻辑,我有一个 rspec 测试,我测试了页面是否被重定向到其他用户的提交?为了通过测试,我必须创建虚拟提交。为此,我正在使用 create() 方法,但提交页面的重定向在测试中失败,但它在网站上运行良好。 submission_controller中负责重定向的代码是
def review_submission
@submission = Submission.where('lesson_id < ?', current_user.submissions.last.assignment.lesson_id.to_i)
.shuffle[1]
if @submission.nil?
redirect_to @assignment
else
redirect_to assignment_submission_path(assignment_id: @assignment.id, id: @submission.id)
end
end
测试代码为
it "redirects to submission path" do
admin_user = create(:admin_user)
sign_in admin_user
user = create(:user)
sign_in user
assignment = create(:assignment, admin_user_id: admin_user.id)
#I was creating dummy submissions data using rspec create method.
submission = create(:submission, lesson_id: 1)
post :create, params: { submission: attributes_for(:submission, user_id: user.id), assignment_id: assignment.id}
expect(response).to redirect_to assignment_submission_path( assignment_id: assignment.id, id: Submission.last.id)
end
虚拟数据来自 FactoryGirl
factory :submission do
user_id 1
assignment_id 1
lesson_id 2
content "this is the submission of my assignment"
factory :invalid_submission do
content ""
end
end
非常感谢任何建议。提前谢谢你。
看起来 @submission
是 nil,所以它会将您重定向到 Attachments#show
页面而不是 Submissions#show page
。您将其设置为:
@submission = Submission.where('lesson_id < ?', current_user.submissions.last.assignment.lesson_id.to_i).shuffle[1]
它正在尝试根据 current_user.submissions
查找提交。您的工厂正在提交如下内容:
submission = create(:submission, lesson_id: 1)
默认 user_id
为 1
,这可能不是您登录用户的 ID(因为您在其上方创建了管理员用户)。尝试将 user_id
传递给 FactoryGirl 创建的提交。实际上也可能想传入 assignment_id
,因此 Submission 将正确地属于 Assignment。
submission = create(:submission, lesson_id: 1, user_id: user.id, assignment_id: assignment.id)
然后应该将提交分配给您的用户,希望控制器能够找到它并且您的测试将通过。