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_id1,这可能不是您登录用户的 ID(因为您在其上方创建了管理员用户)。尝试将 user_id 传递给 FactoryGirl 创建的提交。实际上也可能想传入 assignment_id,因此 Submission 将正确地属于 Assignment。

submission = create(:submission, lesson_id: 1, user_id: user.id, assignment_id: assignment.id) 

然后应该将提交分配给您的用户,希望控制器能够找到它并且您的测试将通过。