加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 预期的响应是a,但是

发布时间:2020-12-17 04:02:30 所属栏目:百科 来源:网络整理
导读:我正在尝试在UsersController中测试创建操作,其中用户是使用配置文件创建的;然后用户被重定向到用户的个人资料页面,但我得到错误预期的响应是 redirect,但是 200. 在用户控制器中创建操作 def create @user = User.new(user_params) if @user.save log_in @u
我正在尝试在UsersController中测试创建操作,其中用户是使用配置文件创建的;然后用户被重定向到用户的个人资料页面,但我得到错误预期的响应是< redirect>,但是< 200>.

在用户控制器中创建操作

def create
  @user = User.new(user_params)
  if @user.save
    log_in @user
    flash[:success] = "Welcome to the Mini Olympics"
    redirect_to user_profile_path(current_user,@profile)
  else
    render 'new'
  end
end

使用有效信息进行注册测试

test "valid signup information" do
  get signup_path
  assert_difference 'User.count',1 do
    post users_path,user: @user.attributes
    @user.build_profile(name: "Micheal Example",street: "24 Martins St.",city: "Waterloo",state: "AW",zipcode: "22456")
    @user.save
    #assert_redirected_to user_profile_path(@user)
    assert_redirected_to @user.profile
  end
  assert_template 'profiles/show'
  assert is_logged_in?
end

解决方法

错误消息表示创建操作失败,而不是重定向到用户的配置文件(状态302),它再次呈现表单(状态200).

至于它失败的原因,目前还不清楚.测试似乎将@user在控制器中的值与测试中@user的值混淆,后者是两个完全不同的对象.

在测试操作时,您可以通过params散列传递值,如上所述:

post users_path,user: @user.attributes

但是测试然后再次设置@user的值,没有充分的理由.我不清楚@user的原始值(测试中的那个)获取其属性的位置.

你可能想做这样的事情:

assert_difference 'User.count',1 do
   user = User.new
   user.build_profile(name: "Micheal Example",zipcode: "22456")
   post users_path,user: user.attributes
   assert_redirected_to user.profile
 end

局部变量用户只是为生成属性哈希值的便利.您可以轻松地将属性直接分配给哈希并将其传递给post.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读