我在capybara / rspec集成测试中有以下步骤,即只是尝试注册一个新成员.
visit new_member_registration_path fill_in('Name:',:with => 'Rob Doe' ) fill_in('member_email',:with => 'rob@smith.com' ) fill_in('member_email_confirmation',:with => 'rob@smith.com' ) fill_in('member_password',:with => 'secret') fill_in('Company or Venue Name:',:with => 'Rob Inc.') fill_in('Contact Number:',:with => '040544404440') click_button('Sign up') save_and_open_page
由于某种原因,’email’和’password’数据没有传递给DeviseRegistrations控制器(查看测试日志时它是空白的),因此导致验证失败.但是直到save_and_open_page没有rspec错误(因此正在填写这些字段).
我错过了什么?我是否需要继承DeviseRegistrations控制器?
测试Rails 3.0.7,机架测试0.5.7和rails 3.1rc1和机架测试0.6.0
解决方法
假设你的Gemfile中有调试器,这里就是你如何使用它. (这假设您正在使用Capybara的Rack驱动程序.)
# test.rb visit new_member_registration_path fill_in('Name:',:with => 'Rob Doe' ) debugger
终端将停止您的脚本并等待您做某事.
# Terminal /file/path/to/you/test.rb:12 fill_in('Name:',:with => 'Rob Doe' ) (rdb:1)
在这里打开一个IRB会话:
(rdb:1) irb
你可以在这里做任何RSpec或Capybara方法:
>> current_path.should == 'foo/bar'
尝试提交表单:
>> click_button "Sign Up" >> save_and_open_page
查看Devise在结果页面上给您的错误消息.使用Rack驱动程序,您将看不到填写的字段.在这种情况下,您可能想尝试使用Selenium驱动程序
# test.rb Capybara.default_driver = :selenium visit new_member_registration_path
但是,您无法使用Selenium驱动程序从IRB驱动Capybara.但是,您将能够看到Selenium将哪些表单值放入您的表单中.由于Selenium会很快发生事情,您可以使用调试器暂停测试,同时检查Selenium在浏览器中打开的页面.