Rails集成测试与设计宝石 [英] Rails integration test with the devise gem

查看:150
本文介绍了Rails集成测试与设计宝石的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想编写一个rails集成测试(使用 ActionDispatch :: IntegrationTest )。我正在使用设计认证和机械师测试模型。我无法成功登录。



这是一个简单的例子:

  UserFlowTest类ActionDispatch :: IntegrationTest 
setup do
User.make
end
test登录网站
#sign in
post_via_redirect'users / sign_in ',:email => 'foo@bar.com',:password => 'qwerty'
p flash
p User.all
end

这里是调试输出:

 加载套件测试/集成/ user_flows_test 
启动
{:alert => ;无效的电子邮件或密码}
[#< User id:980190962,email:,encrypted_pa​​ssword:,password_salt:,reset_password_token:nil,remember_token:nil,remember_created_at:nil,sign_in_count :0,current_sign_in_at:nil,last_sign_in_at:nil,current_sign_in_ip:nil,last_sign_in_ip:nil,created_at:2010-11-27 16:44:10,updated_at:2010-11-27 16:44:10> ,#< User id:980190963,电子邮件:foo@bar.com,encrypted_pa​​ssword:$ 2a $ 10 $ vYSpjIfAd.Irl6eFvhJL0uAwp4qniv5gVl4O.Hnw / BUR ...,password_salt:$ 2a $ 10 $ vYSpjIfAd.Irl6eFvhJL0u reset_password_token:nil,remember_token:nil,remember_created_at:nil,sign_in_count:0,current_sign_in_at:nil,last_sign_in_at:nil,current_sign_in_ip:nil,last_sign_in_ip:nil,created_at:2010-11-27 17:09:13 ed_at:2010-11-27 17:09:13>]
/ unauthenticated
F

这是我的blueprints.rb:

  require'machinist / active_record'
要求'sham'

User.blueprint do
email {foo@bar.com}
密码{qwerty}
end


解决方案

它不起作用的原因是设计创建表单字段名称为<

 '用户[email]'
'用户[密码]'
/ pre>

,post_via_redirect期望这些名称作为参数。所以以下声明将会成功登录。

  post_via_redirect'users / sign_in','user [email]'=> 'foo@bar.com','user [password]'=> 'qwerty'


I want to write an rails integration test (with ActionDispatch::IntegrationTest). I am using devise for authentication and machinist for test models. I cannot successfully sign in.

Here is a simple example:

class UserFlowsTest < ActionDispatch::IntegrationTest
  setup do
    User.make
  end
  test "sign in to the site" 
    # sign in
    post_via_redirect 'users/sign_in', :email => 'foo@bar.com', :password => 'qwerty'    
    p flash
    p User.all
end

Here is the debug output:

Loaded suite test/integration/user_flows_test
Started
{:alert=>"Invalid email or password."}
[#<User id: 980190962, email: "", encrypted_password: "", password_salt: "", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2010-11-27 16:44:10", updated_at: "2010-11-27 16:44:10">, #<User id: 980190963, email: "foo@bar.com", encrypted_password: "$2a$10$vYSpjIfAd.Irl6eFvhJL0uAwp4qniv5gVl4O.Hnw/BUR...", password_salt: "$2a$10$vYSpjIfAd.Irl6eFvhJL0u", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2010-11-27 17:09:13", updated_at: "2010-11-27 17:09:13">]
"/unauthenticated"
F

Here is my blueprints.rb:

require 'machinist/active_record'
require 'sham'

User.blueprint do
  email {"foo@bar.com"}
  password {"qwerty"}
end

解决方案

The reason it doesn't work is devise creates form field names as

'user[email]'
'user[password]'

and post_via_redirect expects those names as arguments. So following statement would make a successful login.

post_via_redirect 'users/sign_in', 'user[email]' => 'foo@bar.com', 'user[password]' => 'qwerty' 

这篇关于Rails集成测试与设计宝石的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆