Joe
Joe

Reputation: 66

Determining Form Submission with RSpec/Capybara

I have a project in which I am using RSpec and Capybara to do unit testing. I have fully flushed out model and controller tests which are passing nicely and handle the heavy lifting for pre-database validation.

I am now testing user experience and front end items and want to know how i could verify that a form did NOT submit. If a user mismatches passwords or some other erred data, I have script to set the error and prevent submission.

I know i could search for error text but where there a way to check that the 'submit' never happened and feel confident that no server trip was made.

I want something like:

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

Upvotes: 3

Views: 3992

Answers (2)

Muhamamd Awais
Muhamamd Awais

Reputation: 2385

In integration tests we most test what the user would see like if an empty field is given then there must be error message according to validations. But still if you want you check as follow

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

Upvotes: 3

Chris Salzberg
Chris Salzberg

Reputation: 27374

This is not something that you should be testing in an integration test. In integration tests you are taking the point of view of the end user, and therefore you should only be testing what the user can actually see. If the only evidence the user sees that the form has not been submitted is an error message, then that is what you should test for.

Upvotes: 3

Related Questions