2010-12-20 87 views
2

如果您的表單有驗證碼(我正在使用人性化的寶石)。如何填寫表格並在寫黃瓜功能時發送並獲得預期結果。驗證碼形式的黃瓜功能

Scenario: Sign Up with Valid Data 
    Given I am not authenticated 
    And I am on the sign in page 
    When I follow "Sign up" 
    And I fill in the following: 
    | Name     | Administrator   |  
    | Email     | [email protected]   | 
    | Password    | 123456     | 
    | Password confirmation | 123456     | 
    And I fill in the captcha correctly 
    And I press "Sign Up" 
    Then I should be on the new_company page 
    And I should see "Hello Manoj" 

現在我可以寫一個步驟定義匹配/ ^我正確填寫catcha $ /但是必須放在那裏?

溫柔一點,我是黃瓜新手,到目前爲止一直令人沮喪。我不是新手Rails或編程,否則。

回答

2

你是對的,Aditya。將與環境相關的代碼放在模型中並不是很好的解決方案但你可以在需要的「存根」 bypass_humanizer?時:

# user.rb 
class User 
    include Humanizer 

    require_human_on :create, :unless => :bypass_humanizer? 

    protected 

    def bypass_humanizer? 
    false 
    end 
end 

# step definitions for your scenarion 
And /^I fill in the captcha correctly$/ do 
    # from now any instance of User class will skip require_human_on validator 
    User.any_instance.stubs(:bypass_humanizer?).returns(true) 
end 

# in Gemfile 
group :development, :test do 
    gem "mocha" 
end 

現在你有一個環境無關的代碼模型,你可以把它放在特定的狀態,你需要的任何時間(用於測試,當然)。

2

因此,我發現的一個解決方案是確保Captcha僅在生產環境中添加。

在某種程度上,我對此感到滿意。但是,這將是減少應用程序中基於環境的分支的理想選擇。

class User 
    ... 
    include Humanizer 
    if Rails.env.production? 
    require_human_on :create, :unless => :bypass_humanizer 
    end 
    ... 
end 
+0

是的,這是最合理的解決方案。試想一下步驟的定義「並且我正確填寫captcha」:-) – 2010-12-21 11:20:47

+0

您是否僅在測試中禁用它?這種驗證碼可以在本地和分期中使用。 – 2016-04-16 08:54:06