ste*_*eve 14 ruby-on-rails devise rspec2 ruby-on-rails-3
我的帮助程序代码看起来像这样(并且工作正常btw):
module ProvidersHelper
def call_to_review(provider)
if user_signed_in? && review = Review.find_by_provider_id_and_user_id(provider.id, current_user.id)
link_to "Edit Your Review", edit_provider_review_path(provider, review), :class => "call_to_review"
else
link_to "Review This Provider", new_provider_review_path(provider), :class => "call_to_review"
end
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行我的测试时,这会产生以下错误:
undefined method `user_signed_in?' for #<ActionView::Base:0x00000106314640>
# ./app/helpers/providers_helper.rb:3:in `call_to_review'
Run Code Online (Sandbox Code Playgroud)
很明显,Devise::Controllers::Helpers当rspec运行测试时,我的帮助程序中没有包含这些内容.任何可能有助于此工作的建议?
编辑:为了提供更多信息,我的spec_helper确实有这个:
config.include Devise::TestHelpers, :type => :controller
config.include Devise::TestHelpers, :type => :view
config.include Devise::TestHelpers, :type => :helper
Run Code Online (Sandbox Code Playgroud)
(可悲的是,我无法使用它:type => [:controller, :view, :helper])
无论如何,我相信这些行将sign_in(scope, object)(和其他)测试助手添加到您的测试中.它们不会添加您在控制器/视图代码中实际使用的帮助程序.
nat*_*vda 12
我认为rspec的理念是尽可能地在完全隔离中测试视图/助手/模型.所以在这种情况下,我会将其删除user_signed_in?并返回false或者true我的结果应该适当地改变.这为您提供了一个干净的隔离测试.
| 归档时间: |
|
| 查看次数: |
7685 次 |
| 最近记录: |