'dan@dan.net' fill_in 'user-6ren">
gpt4 book ai didi

ruby-on-rails - Rails4.1,设计 3.2.4,rspec 功能,我如何获得 confirmation_token?

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:27 24 4
gpt4 key购买 nike

我正在尝试通过以下步骤编写功能规范:

visit "/users/sign_up"
fill_in 'user_email', :with => 'dan@dan.net'
fill_in 'user_password', :with => 'abc123'
fill_in 'user_password_confirmation', :with => 'abc123'
click_button "Sign up"
dan_confirmation_token = get_confirmation_token
visit "/users/confirmation?confirmation_token=#{dan_confirmation_token}"

在以前的设计版本中,我可以直接从以下位置获取 dan_confirmation_token:

User.find_by_email('dan@dan.net').confirmation_token

但是现在设计更安全了。

我用来获取 dan_confirmation_token 的 API 调用是什么?

最佳答案

我得到了这个工作:

visit "/users/sign_up"
fill_in 'user_email', :with => 'dan@dan.net'
fill_in 'user_password', :with => 'abc123'
fill_in 'user_password_confirmation', :with => 'abc123'
click_button "Sign up"
visit "/"
usr = User.find_by_email "dan@dan.net"
raw, enc = Devise.token_generator.generate(usr.class, :confirmation_token)
usr.confirmation_token = enc
usr.confirmation_sent_at = Time.now.utc
usr.save(validate: false)
visit "/users/confirmation?confirmation_token=#{raw}"

我应该注意 usr.save(validate: false) 不会像我想要的那样工作,除非我配置 rspec 以避免使用事务:

vi 规范/spec_helper.rb

设置:config.use_transactional_fixtures = false

因为我在我的测试环境中使用了 sqlite,所以这没什么大不了的。

在每次测试运行结束时,我会这样做:

rm -f db/test.sqlite3

如果我想使用 Postgres 运行我的测试,我将需要在每次测试运行后“清理我的数据库”。

要做到这一点,我会依赖于 gem: https://github.com/bmabey/database_cleaner

关于ruby-on-rails - Rails4.1,设计 3.2.4,rspec 功能,我如何获得 confirmation_token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com