Ожидание RSpec ведет себя странно при получении значения из поля ввода, а значение представляет собой число - PullRequest
0 голосов
/ 10 октября 2019

У меня есть вспомогательный метод, который устанавливает значение в поле ввода, а затем проверяет текст позже. Однако это не удается, если значение является числом. Это выглядит примерно так:

def fill_in_value(label, text_input)
  textarea = find(locator of the input box, using the label passed into this method)
  textarea.set(text_input)
  textarea.value.should == text_input
end

Однако, если text_input - это число, ожидания rspec не оправдываются с expected: 1 got: "1" (using ==)

. Я могу обойти это, выполнив что-то вроде:

text_input = text_input.to_s if text_input.is_a? Numeric

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

1 Ответ

1 голос
/ 10 октября 2019

Значения любого поля HTML будут строками (даже если это поле «число»). Вам не нужно вводить условные выражения для text_input, просто всегда выполняйте text_input = text_input.to_s, поскольку, как следует из названия вашего параметра, это должен быть текст. Кроме того, вы никогда не должны делать textarea.value.should == ..., который является основным рецептом для нестабильных тестов. Вместо этого вы должны использовать средства сравнения, предоставляемые Capybara

textarea.should match_selector(:field, with: text_input.to_s)

или если используется более новый expect синтаксис RSpec

expect(textarea).to match_selector(:field, with: text_input.to_s)
...