繁体   English   中英

当我运行RSpec测试时,ActiveRecord :: RecordNotFound

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM