Я думаю, что вы смотрите не в том месте, ссылка показывает http.post
.Вы хотите IntegrationTest post
.
От: https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/testing/integration.rb
def post(path, **args)
process(:post, path, **args)
end
И:
def process(method, path, params: nil, headers: nil, env: nil, xhr: false, as: nil)
request_encoder = RequestEncoder.encoder(as)
headers ||= {}
# rest
end
Редактировать: двойной знак
В Ruby 2.0 добавлены ключевые слова аргументы и двойной знак.Одиночный восклицательный знак (*) в основном используется, когда у вас есть неизвестное количество аргументов, и он передается как array
.
def with_args(*args)
p args
end
with_args(1,2,"a")
# [1, 2, "a"]
Двойной восклицательный знак (**) действует как *, но дляАргументы ключевых слов:
def with_args(**args)
with_keyword(args)
end
def with_keyword(some_key: nil, other_key: nil)
p "some_key: #{some_key}, other_key: #{other_key}"
end
with_args(some_key: "some_value", other_key: "other_value")
# "some_key: some_value, other_key: other_value"
with_args(some_key: "some_value")
# "some_key: some_value, other_key: "
В ruby вы можете вызывать метод без ()
и передавать хеш без {}
, поэтому
with_args({some_key: "some_value", other_key: "other_value"})
похоже на запись
with_args some_key: "some_value", other_key: "other_value")
См. Этот ответ: Что делает двойной оператор * (сплат) и https://medium.freecodecamp.org/rubys-splat-and-double-splat-operators-ceb753329a78
Итак ...
При записи
post users_path, params: { user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
Это вызовы для обработки
process(:post, users_path, params: { user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
Значение в process
, params
- хеш
{ user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
Не имеет значения другие аргументы ключевых словпроцесс, хеш - все params
, все остальные ключевые слова - ноль
Надеюсь, это имеет смысл ...