Как получить идентификатор пользователя тестового пользователя, созданного файлом тестового устройства?И как мне написать утверждение, используя этот идентификатор пользователя? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть форма в файле ERB, которая в конечном итоге отправляет PATCH в edit_user_path (@user).Вот первая строка кода для формы (единственной релевантной частью является URL):

<%= form_with(model: @user, local:true, url: edit_user_path(@user)) do |f| %>

, который создает следующий HTML-код:

<form action="/users/1/edit" accept-charset="UTF-8" method="post">
<input type="hidden" name="_method" value="patch">

(Rails использует скрытый вводс помощью value = "patch", чтобы браузеры не могли на самом деле сделать PATCH)

(в приведенном выше примере я редактировал пользователя с идентификатором 1)

Так что теперь у меня естьОБРАТИТЕСЬ к edit_user_path (@user).

Теперь, когда моя форма успешно создает указанный выше HTML, я хочу проверить очень специфическую часть этого HTML: form action="/users/1/edit"

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

assert_select 'form[action="/users/1/edit"]'

проблема (я думаю) в том, что я использую приборы длясоздать пользователя в базе данных.Вот код фикстур (в файле test / fixtures / users.yml):

test_user:
  name: Mr. Test
  email: test@email.com
  password_digest: <%= User.digest('password') %>

А вот и полный тест:

class UsersEditTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:test_user) # assinging @user to the user in my fixture file
  end

  test "Editing user with invalid user attributes" do
    patch edit_user_path(@user), params: {user: { name: "",
                                  email: "foo@invalid",
                                  password: "hey",
                                  password_confirmation: "ho"
                                }
                          }
    assert_select 'form[action="/users/???/edit"]'
  end

проблема (я думаю) Iя сталкиваюсь с тем, что я не знаю, какой идентификатор пользователя для пользователя в моем файле фикстур (assert_select 'form[action="/users/1/edit"]')

Кто-нибудь знает, как найти идентификатор ресурса, сгенерированного из фикстур?А также, как правильно построить утверждение assert_select 'form[action="/users/???/edit"]'?

1 Ответ

0 голосов
/ 21 сентября 2019

Если у вас есть доступ к переменной экземпляра @user, вы можете получить доступ к ее атрибутам, например, @user.id

Для вашей строки URL-адреса assert_select вы можете просто использовать интерполяцию строки - http://ruby-for-beginners.rubymonstas.org/bonus/string_interpolation.html

assert_select 'form[action="/users/#{@user.id}/edit"]'

...