以下のコントローラーの redirect_to に問題があると思います。コースには多くのレベルがあり、多くのステップがあります (ステップはレベルに属し、レベルはコースに属します)。ステップに redirect_to しようとしています。
ステップのルートは次のとおりです。
/courses/:course_id/levels/:level_id/steps/:id(.:format)
コントローラーのエラーは次のとおりです。
Failure/Error: click_button "check answer"
NoMethodError:
undefined method `step_url' for #<UserStepsController:0x007ff8ccc478c8>
エラーが発生したコントローラーは次のとおりです。
class UserStepsController < ApplicationController
before_filter :authenticate_user!
def create
@step = Step.find(params[:user_step][:step_id])
current_user.attempt_step!(@step)
respond_to do |format|
format.html { redirect_to @step }
format.js
end
end
def destroy
@step = UserStep.find(params[:id]).step
current_user.remove_user_step!(@step)
respond_to do |format|
format.html { redirect_to @step }
format.js
end
end
end
ここにrspecがあります
describe "attempting a step" do
let(:course) { FactoryGirl.create(:course)}
let(:level) { FactoryGirl.create(:level, course: course) }
let(:step) { FactoryGirl.create(:step, level: level) }
before { sign_in user}
describe "taking a course" do
before { visit course_level_step_path(course.id, level.id, step.id)}
it "should increment the user step count" do
expect do
click_button "check answer"
end.to change(user.user_steps, :count).by(1)
end
describe "toggling the button" do
before { click_button "check answer"}
it { should have_selector('input', value: 'remove step')}
end
end