[英]ActiveRecord::RecordNotFound when I run my RSpec Test
在视图/页面中,我触发字段更改(无表单提交)的jQuery发布,以更新数据库表中的日期字段。 在我的开发服务器中,这似乎工作得很好,但当我运行此测试时,我得到一个ActiveRecord :: RecordNotFounderror,即使此语句之前/之后的计数返回1,我在FireFox中也可以看到它是查找第一行并填写日期。
在测试日志中,我看到所有数据都在对象实例化之前从订单行中删除,这是导致此错误的原因,但我没有看到其他测试中发生的情况。 这让我发疯,感谢您的帮助!
错误
Failures:
1) Order Pages - WWhen a need by date is updated should update the line with the correct date
Failure/Error: Unable to find matching line from backtrace
ActiveRecord::RecordNotFound:
Couldn't find OrderLine with id=1
RSPEC
require 'spec_helper'
describe "Order Pages - " do
subject { page }
before do
create_order_and_sign_in_user
end
def visit_a_order
@order = @user.order.first
visit order_lines_path(@order)
end
describe "When a need by date is updated" do
it "should update the line with the correct date", js: true do
visit_a_order
puts "Order lines count 1 - #{@order.lines.count}" // is 1
fill_in "needby_date", :with => "09/18/2014"
puts "Order lines count 2 - #{@order.lines.count}" // is 1
end
end
end
RSPEC帮手
module OrderHelper
def create_order_and_sign_in_user
@user = create(:user)
@order = create(:order, user: @user)
@order_line = @order.order_line.create(description: "Order 1, Line 1")
sign_in @user
end
end
include ApplicationHelper
def sign_in(user)
visit new_user_session_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
end
def fixture_file_path(file_name)
File.join(fixture_path, file_name)
end
控制器
def update_needby_date
puts "Got to 1 - #{params[:order_line_id]}"
@order_line = OrderLine.find(params[:order_line_id]) //Fails here with an ActiveRecord::RecordNotFound error
puts "Got to 2 - #{params[:order_line_id]}"
@order_line.needby_date = Date::strptime(params[:needby_date], "%m/%d/%Y")
@order_line.save!
respond_to do |format|
format.js { render :nothing => true }
end
end
测试记录
[1m[36m (5.1ms)[0m [1mDELETE FROM "order_lines";[0m
[1m[35m (0.1ms)[0m SELECT name FROM sqlite_master WHERE type='table' AND name='sqlite_sequence';
[1m[36m (4.0ms)[0m [1mDELETE FROM sqlite_sequence where name = 'order_lines';[0m
Started POST "/order_lines/1/update_needby_date" for 127.0.0.1 at 2014-10-01 22:52:00 +0530
Processing by OrderLinesController#update_needby_date as */*
Parameters: {"needby_date"=>"09/18/2014", "order_line_id"=>"1"}
[1m[35mOrderLine Load (0.3ms)[0m SELECT "order_lines".* FROM "order_lines" WHERE "order_lines"."id" = ? LIMIT 1 [["id", "1"]]
**Completed 404 Not Found in 2ms**
我想所需要的只是从现场跳出来。 因此,我最终在同一页面上填写了另一个字段,这使该测试通过了。
describe "When a need by date is updated" do
it "should update the line with the correct date", js: true do
visit_a_order
fill_in "needby_date", :with => "09/18/2014"
fill_in "line_description", :with => "Sample line!"
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.