0
在一個視圖/頁面中,我觸發了一個jQuery post的字段更改(無表單提交)來更新數據庫表中的日期字段。這似乎在我的開發服務器中工作得很好,但是當我運行這個測試時,即使這個語句之前/之後的計數返回1,我也會得到一個ActiveRecord :: RecordNotFounderror,並且我可以在FireFox中看到它是找到第一行並填寫日期。ActiveRecord :: RecordNotFound當我運行我的RSpec測試
在測試日誌中,我看到所有數據正在從對象實例化之前的命令行中刪除,這是導致此錯誤的原因,但我沒有看到發生在我的其他測試中。這讓我瘋狂,任何幫助表示讚賞!
ERROR
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
CONTROLLER
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**
顯示你的'def create_order_and_sign_in_user'。 – 2014-10-01 22:03:49
謝謝彼得。我只是在這裏添加了我的助手類。我使用factory_girl的工廠。 – 2014-10-02 00:23:13
這是我發現的一件有趣的事情。當我用睡眠(檢查時間= 5)填寫日期字段後,我暫停執行,並手動選擇一個日期,測試似乎通過! – 2014-10-02 13:47:31