2012-06-11 10 views
0

我一直在努力創建一個應該在任何rspec測試運行之前執行的登錄函數。在每個rspec請求測試運行之前登錄的獨立幫助函數

我有現在的問題是:

def login 
    post "/session", { "session[username]" => "bjones" } 
end 
我spec_helper.rb文件

然後

,我中的請求目錄我spec.rb文件一個接着一個。

require 'spec_helper' 

describe "Sessions" do 
    describe "GET /dashboards" do 

    login 

    it "displays the dashboard" do 
     get dashboard_path 
     puts response.body 
    end 
    end 
end 

然而,當我嘗試運行測試,我得到:

undefined method `post' for #<Class:0x4f08828> (NoMethodError) 

我是相當新的導軌和全新的測試和RSpec所以也許有我丟失的東西在這裏根本。基本上,我想要做的就是設置會話變量,以便在測試運行時我將登錄。也許不同的方法會更好?或者,也許我需要將該登錄功能放在不同的地方?

我碰到過this答案這是有用的,但它不是用於rspec,所以我無法理解這樣的輔助函數會去哪裏。

+0

您是否在會話助手中定義了登錄功能? – cdesrosiers

+0

不,我只是假設我需要將它包含在我的spec_helper文件中。另外我的理解是,只有視圖和控制器文件才能訪問輔助函數。 – yiinewbie

+0

我認爲你的應用程序已經有一個登錄功能,你只是試圖執行一個單獨的測試。在spec/support/utilities.rb(你必須創建這個文件和目錄)中放置這樣的助手方法對你的測試更好,它將被自動包含進去。但我認爲這不會解決你遇到的錯誤。是否在「spec_helper」中的模塊或類中定義了登錄? – cdesrosiers

回答

0

嘗試

let(:login) { 
    post "/session", { "username" => "bjones" }.to_json 
} 

這可能需要進行修改,以使用.to_json與否,取決於控制器接受什麼內容類型。

相關問題