Opy*_*egs 5 ruby-on-rails minitest ruby-on-rails-4
我正在尝试在UsersController中测试创建操作,其中用户是使用配置文件创建的; 然后用户被重定向到用户的个人资料页面,但我收到错误Expected response to be a <redirect>, but was <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
Run Code Online (Sandbox Code Playgroud)
使用有效信息进行注册测试
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
Run Code Online (Sandbox Code Playgroud)
zet*_*tic 11
错误消息表示创建操作失败,而不是重定向到用户的配置文件(状态302),它再次呈现表单(状态200).
至于它失败的原因,目前还不清楚.测试出现混淆的值@user在控制器,具有的值@user在测试,这是两种完全不同的对象.
在测试操作时,您可以通过params散列传递值,如上所述:
post users_path, user: @user.attributes
Run Code Online (Sandbox Code Playgroud)
但是测试然后@user再次设定价值,没有充分的理由.我不清楚@user(原始值)(测试中的那个)的原始值在哪里得到它的属性.
你可能想做这样的事情:
assert_difference 'User.count', 1 do
user = User.new
user.build_profile(name: "Micheal Example", street: "24 Martins St.", city: "Waterloo", state: "AW", zipcode: "22456")
post users_path, user: user.attributes
assert_redirected_to user.profile
end
Run Code Online (Sandbox Code Playgroud)
局部变量user只是生成属性哈希值的便利.您可以轻松地将属性直接分配给哈希并将其传递给post.
| 归档时间: |
|
| 查看次数: |
10242 次 |
| 最近记录: |