【问题标题】:Rails5 - test if current URL is equal to routed pathRails5 - 测试当前 URL 是否等于路由路径
【发布时间】:2023-03-11 15:38:01
【问题描述】:

我创建了一个测试,以确认在对注册表单的发布请求失败后,当前 URL 与之前相同。在这种情况下,默认 RESTful 路由取代了自定义 url。我的测试通过了,但我认为不完整和/或有错误。

过程: 使用 form_for 方法创建带有注册表单的注册页面 (signup.html.erb):

..
<%= form_for(@user, url: signup_path) do |f| %>
..

为注册页面的获取和发布请求设置路由:

..
get '/signup',  to: 'users#new'
post '/signup',  to: 'users#create'
resources :users
..

用户控制器的操作:

..
def new
    @user = User.new
end
def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
end
..

测试断言当前的url(在提交无效数据的post请求之后)是否等于post请求之前的url,这是路由中设置的自定义路径。

..
test "should keep signup page after failed post request" do
    post signup_path, params:{ user: {  name:  "", email: "user@invalid", password: "123",
                                          password_confirmation: "321" }
                             }
    assert_equal request.fullpath, signup_path
end
..

正如我所写,测试通过了。 问题是,当 form_for(signup.html.erb 文件)中的路径为空时,它仍然会通过。

在最后一种情况下,在失败的 POST 尝试之后,注册页面的 url 不再是 /signup,在我的情况下,它现在是默认的 RESTful 路由 /用户

问题: 有谁知道为什么在尝试发布失败后 request.fullpath 会关联到 /signup 而不是 /users

注意: 我通过运行 rails test:integration 也看到了这个问题

..        
assert_equal request.fullpath, 'signup_path'
..

失败信息:

Failure:
UsersControllerTest#test_should_get_signup_page_after_post_request [/home/ubuntu/workspace/sample_app/test/controllers/users_controller_test.rb:13]:
Expected: "/signup"
  Actual: "signup_path"

但在这种情况下,预期应该是“/users”。

【问题讨论】:

  • @Gilles Goualiladet 对不起,我误解了这个问题。我的错!

标签: ruby-on-rails tdd ruby-on-rails-5 integration-testing


【解决方案1】:

assert_equal 'signup', path 应该在这里通过测试。

你说你想要相同的 url,但你的测试是错误的。同样期望是assert_equal的第一个参数。

您的redirect_to @user 好像不正确,应该是redirect_to user_path(@user) 之类的东西

【讨论】:

    猜你喜欢
    • 2022-11-14
    • 2015-01-19
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多