Ruby on rails 工厂女孩&x2B;Rspec给出以下错误:ActionView::Template::error:(对象id)不是id值
我定义了课程>>级别>>和“工厂女孩”步骤。步骤属于级别,级别属于课程(每一个步骤都有很多关系,反之亦然) 以下是错误(我甚至不知道从哪里开始): 以下是我所需的路线:Ruby on rails 工厂女孩&x2B;Rspec给出以下错误:ActionView::Template::error:(对象id)不是id值,ruby-on-rails,ruby,rspec,factory-bot,Ruby On Rails,Ruby,Rspec,Factory Bot,我定义了课程>>级别>>和“工厂女孩”步骤。步骤属于级别,级别属于课程(每一个步骤都有很多关系,反之亦然) 以下是错误(我甚至不知道从哪里开始): 以下是我所需的路线: course_level_step GET /courses/:course_id/levels/:level_id/steps/:id(.:format) steps#show 这是我的简历: describe "attempting a step" do let(:course) {
course_level_step GET /courses/:course_id/levels/:level_id/steps/:id(.:format) steps#show
这是我的简历:
describe "attempting a step" do
let(:course) { FactoryGirl.create(:course)}
let(:level) { FactoryGirl.create(:level)}
let(:step) { FactoryGirl.create(:step)}
before { sign_in user}
describe "taking a course" do
before { visit course_level_step_path(course.id, level.id, step.id)} <<< here is the problem
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
任何关于错误和如何解决错误的指导都将不胜感激 您的错误似乎来自视图。你能把代码和控制器也贴出来吗?也为了以后省去你更多的麻烦:这条线
before { visit course_level_step_path(course.id, level.id, step.id) }
由于Factory Girl的工作方式,创建了一个步骤、两个级别和三个课程。您可能想将两个let子句重写到
let(:level) { FactoryGirl.create(:level, course: course) }
let(:step) { FactoryGirl.create(:step, level: level) }
您的错误似乎来自视图。你能把代码和控制器也贴出来吗?另外,为了避免以后的麻烦:由于Factory Girl的工作方式,在{Visite course\u level\u step\u path(course.id,level.id,step.id)}之前的这一行
创建了一个步骤、两个步骤和三个步骤。您可能想将两个let子句重新写入let(:step){FactoryGirl.create(:step,level:level)}
和let(:level){FactoryGirl.create(:level,course:course)}
您对let的建议-实际上解决了问题,而无需深入研究视图。我很乐意接受这个答案。然而,它发现了另一个错误,我的控制器出现了问题,如图所示:哈,我接受;-)我复制粘贴了它
before { visit course_level_step_path(course.id, level.id, step.id) }
let(:level) { FactoryGirl.create(:level, course: course) }
let(:step) { FactoryGirl.create(:step, level: level) }