Ruby on rails 如何修复Desive密码重置流的片状水豚测试
我在Rails中进行了一个脆弱的系统测试,但似乎无法修复。每次这个测试开始失败时,我都会用等待时间方法给水豚的Ruby on rails 如何修复Desive密码重置流的片状水豚测试,ruby-on-rails,ruby,devise,capybara,minitest,Ruby On Rails,Ruby,Devise,Capybara,Minitest,我在Rails中进行了一个脆弱的系统测试,但似乎无法修复。每次这个测试开始失败时,我都会用等待时间方法给水豚的加上几秒钟,测试会通过一段时间。通常,这个测试是单独通过的,然后在我运行整个测试套件时失败。然后我增加了等待时间,当运行整个测试套件时,等待时间会过去一段时间,直到我在我的应用程序中更改了其他东西,无论出于何种原因,这些东西会破坏这个特定的测试 起初我想,好吧,我只需要等待浏览器,这是一个系统测试,但现在这个等待时间已经开始慢慢上升到一个荒谬的水平。(旁注:类似的事情也发生在一个系统测试
加上几秒钟,测试会通过一段时间。通常,这个测试是单独通过的,然后在我运行整个测试套件时失败。然后我增加了等待时间,当运行整个测试套件时,等待时间会过去一段时间,直到我在我的应用程序中更改了其他东西,无论出于何种原因,这些东西会破坏这个特定的测试
起初我想,好吧,我只需要等待浏览器,这是一个系统测试,但现在这个等待时间已经开始慢慢上升到一个荒谬的水平。(旁注:类似的事情也发生在一个系统测试中,即在搜索栏中输入搜索词并等待响应。)是否有更好的方法来测试这一点,或者告诉水豚等待浏览器是唯一的方法?我知道我可以信任Deviate,不需要对Deviate的密码重置邮件程序进行单元测试,但我想测试用户在密码重置过程中的流量
这是一个不可靠的测试:
require 'application_system_test_case'
class UserPasswordResetTest < ApplicationSystemTestCase
def setup
ActionMailer::Base.deliveries.clear
@user = users(:george)
end
test "should allow you to request a password reset email" do
visit login_path
click_link "Forgot your password?"
assert_current_path "/users/password/new"
using_wait_time(30) do
fill_in "user[email]", with: @user.email
end
click_button "Request password reset"
using_wait_time(25) do
assert_text "You will receive an email with instructions on how to reset your password in a few minutes."
end
end
end
要求“应用程序\系统\测试用例”
类UserPasswordResetTest
以下是我的测试助手:
有什么更好的方法来测试这个没有那么脆弱的密码重置流呢?如果测试通过了长时间的等待,那么你需要查看测试日志,看看为什么你的控制器动作需要花费这么长时间才能呈现(水豚只是在等待这些东西出现在浏览器中,并且会尽快继续)。如果测试不能可靠地通过扩展等待,那么您需要提供返回错误的详细信息
还要注意的是,当您只调整单个呼叫的最大等待时间时,您不需要使用using_wait_time
方法,您只需将wait
传递给正在调用的方法即可
fill_in "user[email]", with: @user.email, wait: 30
谢谢从未考虑过跟踪我的测试日志()tail-f log/development.log
。这将帮助我诊断问题。