Определение отправки формы с помощью RSpec/Capybara

У меня есть проект, в котором я использую 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

person Joe    schedule 15.10.2012    source источник


Ответы (2)


Это не то, что вы должны тестировать в интеграционном тесте. В интеграционных тестах вы принимаете точку зрения конечного пользователя, и поэтому вы должны тестировать только то, что пользователь действительно может видеть. Если единственным доказательством того, что форма не была отправлена, является сообщение об ошибке, то это то, что вы должны проверить.

person Chris Salzberg    schedule 16.10.2012
comment
Я не согласен. Тест должен заключаться в том, что пользователь испытывает, а не в том, что он видит. Они, безусловно, испытывают пост на сервере, и это не то, чего я хочу. - person Joe; 16.10.2012
comment
Что бы они ни испытывали, вы должны иметь возможность протестировать их через интерфейс. Они не получают сообщение сервера напрямую (что вы пытаетесь проверить), они получают его через сообщение об ошибке или любой другой вывод, который вы предоставляете. - person Chris Salzberg; 16.10.2012

В интеграционных тестах мы чаще всего проверяем, что увидит пользователь, если указано пустое поле, тогда должно быть сообщение об ошибке в соответствии с проверками. Но все же, если вы хотите, вы проверяете, как следует

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
person Muhamamd Awais    schedule 28.11.2012