assert_select в IntegrationTest Ruby on Rails - PullRequest
0 голосов
/ 16 декабря 2018

Я пришел из Python и Java с базовыми знаниями CSS, HTML, Ruby и пытаюсь изучить веб-разработку с использованием Ruby on Rails.Я пытаюсь следовать руководству по Michael Hartl .У меня постоянно возникают проблемы с чтением правильного API или даже с пониманием того, что делает API, когда я делаю, потому что кажется, что есть много способов вызвать определенный метод, и примеры там не показаны полностью.В частности, я не понимаю, как с какими аргументами работает метод assert_select в листинге 7.25.

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest

  test "invalid signup information" do
    get signup_path
    assert_no_difference 'User.count' do
      post users_path, params: { user: { name:  "",
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
    end
    assert_template 'users/new'
    assert_select 'div#<CSS id for error explanation>'
    assert_select 'div.<CSS class for field with error>'
  end
  .
  .
  .
end

Ссылаясь на Онлайн-API , если использовать assert_select без блоков кода, мы будем использовать 2 аргумента.Однако здесь есть только 1 в каждом из 2 примеров, с # и ., и я не слишком знаком, если это какой-то синтаксис Rails / Ruby / CSS, происхождение синтаксиса кажется смешанным.

Может ли кто-нибудь просветить меня, чего мне здесь не хватает?Я не слишком знаком, когда использовать # и когда использовать ., и как мы можем «сократить» количество аргументов.Кажется, что в пунктуациях, подобных _, всегда много шансов, которые здесь не показаны.

1 Ответ

0 голосов
/ 16 декабря 2018

assert_select можно назвать несколькими различными способами , в том числе с помощью всего лишь селектора CSS, как код в вашем вопросе.

Селекторы CSS могут содержать # и . символов.Вот что они означают:

  • # ссылается на идентификатор элемента HTML
  • . ссылается на класс CSS

Идентификаторы должны быть уникальными в пределахдокумент.Таким образом, div#error найдет этот точный элемент: <div id="error">Some error text</div>.

С другой стороны, классы могут быть повторно использованы во всем HTML-документе.Итак, div.error найдет все элементы, подобные этому: <div class="error">Some error text</div>.

Наконец, для чего стоит, # и . также используются в Ruby для разграничения методов класса и экземпляра.. обозначает метод класса.# обозначает метод экземпляра.Но это не то, что происходит в методе assert_select.

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