我正在尝试使用以下步骤编写功能规范:
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调用是什么?
答案 0 :(得分:1)
我有这个工作:
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 / spec_helper.rb
组: config.use_transactional_fixtures = false
由于我在test-env中使用sqlite,这不是什么大问题。
在每次测试运行结束时,我这样做:
rm -f db / test.sqlite3
如果我想使用Postgres运行我的测试,我需要"清理我的数据库"每次试运行后。
要做到这一点,我会依赖宝石: https://github.com/bmabey/database_cleaner
答案 1 :(得分:0)
您可以查看可疑模块的Devise test suite,看看他们是如何做到的。您似乎可以致电raw_confirmation_token
;我不知道这是否适合你的情况。