无法理解水豚的行为
我对我的Rails应用程序进行了这种集成测试:
require 'test_helper' class StudyCapybaraTest :chrome) end Capybara.current_driver = :selenium_chrome #Capybara.default_wait_time = 5 visit login_path fill_in "session_email", with: @user.email fill_in "session_password", with: 'password' click_button "session_commit" end test "full study process" do assert_title "Home | Word Up" visit study_user_path(@user) .... end end
奇怪的是,当我删除第一个测试的第一行“完整的学习过程”
assert_title "Home | Word Up"
测试失败,因为测试用户似乎没有登录。移动时会出现同样的问题
visit study_user_path(@user)
进入设置function(就像之前一样)。
但这并没有改变序列和逻辑,对吧? 我唯一能想到的是,断言来得很早,应用程序没有时间执行满足断言所需的指令。
这是一个时间问题,如果是这样,我怎样才能防止它们在将来发生? 谢谢!
首先,你对它的直觉是一个时间问题是正确的。 click_button就是这样 – 它点击按钮。 它不会等待表单发布,它不会等待任何ajax发生等等。因此,如果没有assert_title,您的测试是单击按钮,并立即更改浏览器中的URL。 更改浏览器中的URL将具有取消由click_button调用触发的任何表单提交或行为的效果。 你需要在click_button之后等待页面上因为单击按钮而在页面上发生变化的内容
assert_text('You are now logged in')
其次,setup方法在每次测试之前运行,所以你真的不想在那里注册驱动程序,因为它只需要完成一次。
- Ruby on Rails Rake资产:预编译错误
- Rails:CSRF令牌无法正常工作但设置正常
- 如何组织太胖的Rails模型?
- 升级到rails 3.1.0后,使用atom_feed的ActionView :: Template :: Error(错误的参数数量(1表示0))
- 在Heroku上安装rmagick gem的问题
- 无法激活机架(〜> 1.4.0,运行时)已激活rack-1.5.0
- Ruby-on-Rails:从模型中选择不同的值
- Ruby Devise,SessionsController.create,json – 获取NameError:undefined’build_resource’?
- Ajax-submit表单上的“复选框onclick”:为什么会出现此错误?