2010-08-17 81 views
0

我對cucumber和rspec很新,但是有一些rails和ruby的理解。Cucumber Help in Rails 3

有問題的寶石有:設計,Declarative_Authorization和role_model

Rails 3的是什麼我使用和Ruby 1.9.2-RC2

記得我不知道我在做什麼

我寫了一個特點:

Feature: As the administrator of the site give me quick access to information 
    In order to do lots of stuff 
    As an administrator 
    I want to see reports and stuff 

    Background: 
    Given a logged in user with a role of "admin" 

    Scenario: Admin can see links 
    Given I am on the admin dashboard page 
    Then I should see all admin links 

隨着一些網站的步驟:

module AdminDashboardHelpers 

    def current_user_session 
    return @user_session if defined?(@user_session) 
    @user_session = user_session 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.user 
    end 

    def admin_signed_in? 
    @user = current_user 
    @user.has_role?(:admin) 
    end 
end 

World(AdminDashboardHelpers) 


Given /^a logged in user with a role of "([^\"]*)"$/ do |role| 
    visit new_user_session_path 
    fill_in "Login", :with => "iam" 
    fill_in "Password", :with => "secret" 
    click_button "Log in" 
    admin_signed_in? 
    #@current_user.should has_role?(role) 
end 

Then /^I should see all admin links$/ do 
    pending # express the regexp above with the code you wish you had 
end 

我的問題是,當我運行的功能,我收到一個錯誤說的#Cucumber :: Rails的::全球 未定義的局部變量或方法`USER_SESSION」:0x8077e1f8

我的假設下該user_session是一個設計來的方法。 如何測試用戶是否具有某種特定角色?

或者更好的是,我該如何告訴黃瓜有關由寶石提供的rails應用程序的方法? 謝謝你的時間,這是不勝感激。 --iAm

回答

2

通常情況下,你不應該在黃瓜做這種有點測試,它太高級別。你通常會在你的規格中做這些,而不是你的功能。在黃瓜裏,你正在瀏覽一個模擬瀏覽器,所以你不必設置所有的幫助者等等。只需像訪問用戶一樣訪問Web應用程序,然後登錄。堆棧應該完成剩下的工作..我正在使用設計,這裏是我設置管理員的方式。

Given /^I have one\s+administrator "([^\"]*)" with email "([^\"]*)" and password "([^\"]*)"$/ do |name,email, password| 
    Administrator.new(:email => email, 
        :username=>name, 
        :password => password, 
        :password_confirmation => password).save! 
end 

Given /^I am an Authenticated Administrator$/ do 
    name = 'admin' 
    email = '[email protected]' 
    password = 'secret!' 

    Given %{I have one administrator "#{name}" with email "#{email}" and password "#{password}"} 
    And %{I go to the administrator login page} 
    And %{I fill in "administrator_username" with "#{name}"} 
    And %{I fill in "administrator_password" with "#{password}"} 
    And %{I press "Sign in"} 
end 

Given /^I have not authenticated as an+ "([^"]*)"$/ do |role| 
    visit("/#{role}s/sign_out") 
end 

至於測試某個角色,你可以在rspec中做,而不是在黃瓜。您在黃瓜測試的方式是轉到只有該角色可以看到的頁面,並確保您可以看到它,然後再進行一次測試,該頁面應該無法看到,並確保獲得您期待的錯誤。

+0

謝謝你的回答,我會改變我的方法並繼續閱讀這個主題。 – creativeKoder 2010-08-18 14:40:11

+0

我的另一個問題是,如果我想要忠於BDD,我應該從一個黃瓜還是rspec測試開始? – creativeKoder 2010-08-18 16:05:07

+1

我推薦閱讀Prag Press的Rspec書(http://pragprog.com/titles/achbd/the-rspec-book),但通常你先寫功能,編寫步驟,使用紅色構建視圖邏輯:綠色:在Rspec中重構,然後是rspec中的控制器邏輯,然後是對象,然後返回到黃瓜,並希望看到一步傳遞.. – Doon 2010-08-18 16:23:46