Rails5 - 测试当前URL是否等于路由路径

时间:2018-03-26 20:02:47

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

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

PROCESS: 使用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请求之前的那个,这是路由中设置的自定义路径。

..
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尝试失败后,注册页面的网址不再是 / signup ,它现在是默认的RESTful路由,在我的情况下 /用户 即可。

问题: 有没有人知道为什么 request.fullpath 在发布失败后会与 / signup 相关联而不会与 / users 相关联?

注意: 我也看到了这个问题,方法是运行 rails test:integration signup_path 放在引号下,并且 form_for 中没有定义url:

..        
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"

但预期应该是&#34; / users&#34;在这种情况下。

1 个答案:

答案 0 :(得分:0)

this.state.t.map((ele, idx) => { if (!this.state.pageCount || (idx + 1 > this.state.page - 1 * this.state.pageCount && idx + 1 <= this.state.page * this.state.pageCount)) return ( 应该在这里通过测试。

您说过要使用相同的url,但测试错误。期望值也是assert_equal 'signup', path的第一个参数。

您的assert_equal似乎不正确,应该类似于redirect_to @user