gpt4 book ai didi

ruby-on-rails - 如何在 Capybara 测试中用 Rspec 淘汰 Warden/Devise

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:49 27 4
gpt4 key购买 nike

我想在我的 Rails 应用程序的 Capybara 测试套件中使用 rspec 模拟来阻止登录用户(使用 Devise/Warden)。这将节省大量时间,并且意味着我的测试套件可以/将会定期运行。

以前,我可以使用 authlogic 来完成此操作,方法是使用如下代码删除我的 session 模型:

def login(user)
user_session = mock_model(UserSession, {:user => user})
UserSession.stub(:find).and_return(user_session)
end

现在我正在使用 Devise,我不再有权访问 UserSession 对象。由于我正在使用 capybara 测试我的代码,因此我无法直接访问请求对象以使用设计的内置 sign_in 测试助手。

我的问题是:如何使用 capybara 、设计和规范模拟来模拟登录用户,而不需要登录用户的每个场景都首先转到注册路径、填写表格、提交、等待响应,然后转到所需的页面?

最佳答案

Warden 带有内置的测试助手。它允许您无需在 cucumber 测试中使用 UI 即可登录。只需将以下文件添加到您的项目中即可。

#features/support/warden.rb

Warden.test_mode!
World Warden::Test::Helpers
After { Warden.test_reset! }

#features/step_definitions/user_steps.rb

Given /^I am logged in as a user$/ do
@current_user = User.create!(:username => 'user', :password => 'password')
login_as(@current_user, :scope => :user)
end

Use Wardens.test_mode! with Capybara

关于ruby-on-rails - 如何在 Capybara 测试中用 Rspec 淘汰 Warden/Devise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705790/

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