小编ste*_*eve的帖子

使用Rspec 2和Devise在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)(和其他)测试助手添加到您的测试中.它们不会添加您在控制器/视图代码中实际使用的帮助程序.

ruby-on-rails devise rspec2 ruby-on-rails-3

14
推荐指数
1
解决办法
7685
查看次数

在提交之前如何通过您的暂存文件进行grep?

所以在运行之前git commit我经常运行以下内容:

git grep --cached -l -I "debugger"
Run Code Online (Sandbox Code Playgroud)

我认为它类似于:

git diff --cached
Run Code Online (Sandbox Code Playgroud)

(它将显示您即将提交的所有更改,即将显示您的暂存文件中的差异).

不幸的是,我刚刚发现这个--cached选项git grep只是告诉git"只"查看其索引中的所有内容.

那么我怎样才能运行git grep并让它只通过我的分阶段文件?

(是的,我知道我可以简单地进行git diff --cached搜索,但我宁愿拥有编程能力来浏览我的分段文件.)

git grep commit git-commit

11
推荐指数
2
解决办法
1887
查看次数

在rspec中测试邮件程序

有没有简单的方法来做相同的response.should render_template(:foo)邮件规范?这就是我想要做的事情:

mail.should render_template(:welcome)

这是不是要求太过分了?我是否陷入了heredocs的黑暗时代,或者手动阅读灯具来匹配?

actionmailer rspec2

5
推荐指数
1
解决办法
2553
查看次数