Как вы тестируете пустое поле ввода? - PullRequest
7 голосов
/ 28 мая 2009

Я пытаюсь проверить, соответствует ли поле ввода одной из моих фабрик, где поле пусто.

address => {:first_name => '', :last_name => ''}

При проверке того, что находится в поле ввода, я использовал это:

assert_select '#first_name[value=?]', address.first_name

За исключением того, что это не работает, если имя пустое. Я получу эту ошибку, и тест не пройден.

Expected at least 1 element matching "#first_name[value='']", found 0.
<false> is not true.

Это имеет смысл, поскольку сгенерированный код не будет иметь атрибута value. Есть ли лучший способ проверить значение поля ввода?

На данный момент, чтобы проверить это, я могу проверить, является ли поле адреса пустым, а затем проверить, есть ли поле ввода без атрибута значения. Но это грязно и многословно.

Пример универсальной проверки, которая работает, но занимает много времени:

if address.first_name.blank?
  assert_select '#first_name[value]', 0
  assert_select '#first_name[type=text]', 1
else
  assert_select '#first_name[value=?]', address.first_name
end

Связанная информация, которую я использую:
Hpricot 0.8.1
Нокогири 1.1.1
Рельсы 2.2.2
Thoughtbot-Shoulda 2.0.5
Вебрат 0.4.1

1 Ответ

1 голос
/ 29 мая 2009

Может быть, вы можете использовать:

assert_select "#first_name" do
  assert_select "[value=?]", address.first_name unless address.first_name.blank?
end

Не думаю, что смогу получить его короче. Если в вашем тестовом примере это повторяющийся шаблон, вы можете извлечь его в пользовательское утверждение:

def assert_has_value_unless_blank(selector, value)
  assert_select selector do
    assert_select "[value=?]", value unless value.blank?
  end
end

assert_has_value_unless_blank "#first_name", address.first_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...