2014-10-01 37 views
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** 
+1

顯示你的'def create_order_and_sign_in_user'。 – 2014-10-01 22:03:49

+0

謝謝彼得。我只是在這裏添加了我的助手類。我使用factory_girl的工廠。 – 2014-10-02 00:23:13

+0

這是我發現的一件有趣的事情。當我用睡眠(檢查時間= 5)填寫日期字段後,我暫停執行,並手動選擇一個日期,測試似乎通過! – 2014-10-02 13:47:31

回答

0

我想需要,一切都從外地製表出來。所以我最終填寫了同一頁面上的另一個領域,並讓這個測試通過。

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 
相關問題