Capybara 1.1.2、Rails 3.1.3、rspec-rails 2.9.0、Ruby1.9.3p0を使用しています。
標準ユーザーとaccount_adminユーザーがいるアプリを想定します。標準ユーザーは別の標準ユーザーを作成できますが、標準ユーザーはaccount_adminユーザーを作成できません。
もちろん、UIには、標準ユーザーにアカウント管理者を作成するオプションはありません。ただし、Firebugを使用すると30秒で、ユーザーはHTMLを書き直して、POSTリクエストを送信してaccount_adminを作成できます。
私のアプリがこの種の単純なハッキングを防ぐことをテストするにはどうすればよいですか?
通常の標準ユーザーテストは次のようになります。
context "when standard user is signed in" do
before do
login_as standard_user
visit users_path # go to index
click_link('Add user') # click link like user would
end
describe "when fields are filled in" do
let(:new_email) { "new_user@example.com" }
before do
fill_in "Email", with: new_email
fill_in "Password", with: "password"
fill_in "Password confirmation", with: "password"
choose "Standard user" # radio button for Role
end
it "should create a user" do
expect { click_button submit }.to change(User, :count).by(1)
end
end
end
フォームで許可されていない値を取得するようにテストを「だます」方法はありますか?ラジオボタンをテキストフィールドのように扱ってみましたが、Capybaraはそれを存在しないフィールドとして拒否します。
fill_in "Role", with: "account_admin" # doesn't work
paramsハッシュの直接変更も機能しません。
params[:role] = "account_admin" # doesn't work
これをコントローラーテストのように、直接呼び出す必要がありpost :create
ますか?