3

RSpec と Capybara を使用して単体テストを行うプロジェクトがあります。モデルとコントローラーのテストを完全に洗い出し、問題なくパスし、データベースの事前検証のための重労働を処理しました。

現在、ユーザー エクスペリエンスとフロント エンド アイテムをテストしており、フォームが送信されなかったことを確認する方法を知りたいと考えています。ユーザーがパスワードやその他の誤ったデータと一致しない場合、エラーを設定して送信を防止するスクリプトがあります。

エラーテキストを検索できることは知っていますが、「送信」が行われなかったことを確認する方法があり、サーバーへのトリップが行われていないことを確信できます。

私は次のようなものが欲しい:

it "should not sumbit if user name is less than 3 characters" do
  visit /edit_account_settings(@user)
  fill_in "username", :with => "fo"
  click_button "SAVE"

  # HOW DO I DO THIS?
  expect( ... ).not_to submit_to_server 
end
4

2 に答える 2

3

これは、統合テストでテストする必要があるものではありません。統合テストでは、エンドユーザーの視点を取り入れているため、ユーザーが実際に見ることができるものだけをテストする必要があります。フォームが送信されていないことをユーザーが確認する唯一の証拠がエラーメッセージである場合は、それをテストする必要があります。

于 2012-10-16T00:21:30.967 に答える
3

統合テストでは、ほとんどの場合、空のフィールドが指定された場合にユーザーがどのように見えるかをテストし、検証に従ってエラー メッセージが表示される必要があります。ただし、必要な場合は次のようにチェックしてください

describe "User Registration" do

  before do
    visit /edit_account_settings(@user)
    fill_in "username", :with => "fo"
    click_button "SAVE"
  end

  it "should not sumbit if user name is less than 3 characters" do
    page.should have_content "your error message" 
  end

  it "should create the user and redirect to blah_path" do 
    current_path.should eq blah_path
  end

  it "should add user in users table" do
    expect { user.create }.to change(User, :count).from(0).to(1)
  end

end
于 2012-11-28T19:30:45.643 に答える