2012-01-21 9 views
1

私はちょうどレールを学びながらキュウリから始まり、試してみるためにいくつかのシナリオを実行しました。以下のシナリオを評価し、特に第3ステップの定義を行うためのより良い方法を教えてください。Rails + Cucumber:制限付きリソースへのアクセスをテストするには?

私はdeviseを使用していますので、ユーザーをかなりカスタマイズしていますので、何かを変更してもユーザーが期待通りに動作することを確認したいと思います。

多分この部分は大丈夫です(任意の入力歓迎)。

Scenario: Visitor creates an account 
    Given I am not authenticated 
    When I do everything required to create an account 
    Then I should have access to it 

最初の2つの手順もOKです。

Given /^I am not authenticated$/ do 
    visit destroy_user_session_path 
end 

When /^I do everything required to create an account$/ do 
    email = '[email protected]' 
    name = 'asdf' 
    password = 'asdf' 
    visit new_user_registration_path 
    fill_in 'user_email', :with => email 
    fill_in 'user_name', :with => name 
    fill_in 'user_password', :with => password 
    fill_in 'user_password_confirmation', :with => password 
    click_on('Sign up') 

end 

しかし、第3のものが私を得ます。私はヘッダーで200回成功したか、またはユーザーがアクセス権を持っているかどうかを確認する基本的な方法として未承認の401のいずれかをテストすることを考えていました。しかし、私はそれを行う方法を見つけることができませんでした。私に正しいアイデアがあるなら、それを行うコードは何ですか?私が間違ったアイディアを持っているなら、それはなぜそうであり、それを行う良い方法は何ですか?

Then /^I should have access to it$/ do 
    visit edit_user_registration_path 
    page.should have_selector "something that only exists on the edit registration page" #works but seems very brittle 
    # my failed attempt at using rspec inside the step definition: 
    # get edit_user_registration_path 
    # response.headers["Status"].downcase.should == "200 success" 
    # 
    # another failed attempt: 
    # response.should render_template(...) 
    # end 
end 

答えて

1

まず、2つのシナリオで必要なものを分けます。 1つ目は、「ビジターがアカウントを作成する」というものです。ここでは、ユーザーに表示するメッセージをテストすることで最後のステップを置き換えます。「アカウントが正常に作成されました。 2番目は、ログインしたユーザーのみがアクセスできるリンクをクリックしてテストできる「ユーザーのログイン」です。とにかく、Cucumber、RSpec、Deviseを使用している場合は、あなたが探しているものを正確に見つけるRails 3 in Actionを読むことを強くお勧めします。あなたがキュウリのテーブルやもっと興味深いものを学ぶ例もあります。

希望があれば、

+0

これは私の他の答えによってわかりましたか? :) 回答ありがとうございます!私はそのスタイルが使われているのを見ましたが、それはワークフロー/ UIに不必要に結合されているようです。私はそれらのための別の仕様を持っています。私はそれが標準ではないと思うが、それは私がそれを試しているように私が思うように適合する。私は[これらの行](http://ruby.11.n6.nabble.com/How-do-I-include-routing-path-helpers-td3484906.html)に沿ってより多くのことを考えていました。スペック/ルーティングの外側に配置します。私が達成しようとしているのは、その動作がインターフェイス(HTML/JSON/etc)とは独立して動作することをテストすることだけです。 – KobeJohn

+0

ああ、本のためにありがとう。私はBDDのためにキュウリを使用するものを見ていませんでした。私はキュウリのスタイルで楽しい仕事をしています。実装を望ましい動作から離そうとするのは良い練習です。 [例による仕様](http://www.amazon.com/Specification-Example-Successful-Deliver-Software/dp/1617290084/ref=pd_bxgy_b_img_b)は優れた本です。 – KobeJohn

関連する問題