如果只更改注册视图,是否需要自定义Devise控制器?

时间:2011-05-18 01:26:38

标签: ruby-on-rails rspec devise integration-testing capybara

我在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

2 个答案:

答案 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)

问题出在应用程序布局文件中。我有另一个(虽然是隐藏的)表单,发布空白表单字段。

在我创建了一个空白项目并看到它完美运行后,我将应用程序的所有潜在部分剥离,直到找到罪魁祸首。

所以问题的答案是,不,当您使用自定义设计视图时,不需要自定义设计控制器。