2014-02-17 91 views
-1

我正在我的應用程序中構建一個活動流功能,所有活動都是通過控制器方法創建的。活動流測試

當控制器方法成功時,活動記錄到活動表。由於我的控制器操作是通過ajax調用的,我嘗試直接從我的rspec測試中發佈。

我嘗試這樣做:

Net::HTTP.post_form(URI.parse("http://localhost:5000#{inquiry_path}"), { :id=> @user.id, :type => 'Inquiry' }) 

這是我所看到的被張貼在我的螢火,使Ajax調用時:

id:55 
type:Inquiry 
url:/user_inquiry 

所以我斷言活動計數是否發生了變化:

it "activity count should be changed" do 
    PublicActivity::Activity.count.should == 1 
end 

當我完成測試計數已經改變後,我想看到用戶主頁實際上顯示鋪設新的通知。

但此測試失敗:

Failure/Error: PublicActivity::Activity.count.should == 1 
     expected: 1 
      got: 0 (using ==) 

以防萬一我把放聲明在我的控制器,以檢查是否調用實際到達控制器:

puts "Hereeee" 

我沒有看到消息得到打印,所以我猜想請求永遠不會到達控制器,爲什麼?

我在這裏做錯了什麼,我該如何測試?

+1

首先你應該做一個控制器或功能規範(取決於你測試的是什麼),並使用rspec方法來處理請求,例如'get','post'以處理所有的服務器運行時。除此之外,常見的問題原因可能是您未登錄,並且您未授權用戶訪問該操作。您應該先登錄,然後在請求中添加用戶會話。 – Nikos

+0

我已經登錄了,但那不是問題,我有控制器/功能規格分開。謝謝 –

回答

-1

我測試的想法是,除非請求沒有到達控制器部分好吧,這裏是我如何解決它(之前它):

page.driver.post("#{inquiry_path}?id=" + @user.id) 

it "post request should return the right response code" do 
    page.driver.status_code.should eql 200 
    end 

現在我的請求到達控制器。

+0

@phoet在這裏找到它btw。 http://stackoverflow.com/questions/4084212/how-do-you-post-to-a-url-in-capybara,不知道你的意思是最糟糕的一種測試,你只看到我的測試的一部分 –