我在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控制器?
使用rack-test 0.5.7和rails 3.1rc1以及rack-test 0.6.0测试Rails 3.0.7
答案 0 :(得分:3)
假设你的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在浏览器中打开的页面。
答案 1 :(得分:2)
问题出在应用程序布局文件中。我有另一个(虽然是隐藏的)表单,发布空白表单字段。
在我创建了一个空白项目并看到它完美运行后,我将应用程序的所有潜在部分剥离,直到找到罪魁祸首。
所以问题的答案是,不,当您使用自定义设计视图时,不需要自定义设计控制器。