Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 应用程序助手规范,测试控制器特定输出?_Ruby On Rails_Rspec_Tdd_Ruby On Rails 3.1_Helper - Fatal编程技术网

Ruby on rails 应用程序助手规范,测试控制器特定输出?

Ruby on rails 应用程序助手规范,测试控制器特定输出?,ruby-on-rails,rspec,tdd,ruby-on-rails-3.1,helper,Ruby On Rails,Rspec,Tdd,Ruby On Rails 3.1,Helper,我有点不确定如何为助手方法编写测试,该方法的输出基于给定的控制器和请求的操作 在我的应用程序帮助程序中给定以下帮助程序方法 module ApplicationHelper def body_id [ controller.controller_name, controller.action_name ].join("_") end end 。。。如何编写测试此方法的应用程序\u helper\u spec?分配或模拟控制器对象。这会给你一些可以测试的东西。(RSpec包括一个

我有点不确定如何为助手方法编写测试,该方法的输出基于给定的控制器和请求的操作

在我的应用程序帮助程序中给定以下帮助程序方法

module ApplicationHelper
  def body_id
    [ controller.controller_name, controller.action_name ].join("_")
  end
end

。。。如何编写测试此方法的
应用程序\u helper\u spec

分配或模拟控制器对象。这会给你一些可以测试的东西。(RSpec包括一个非常好的模拟/存根库。)

正如@marnen laibow koser所提到的,RSpec rails为测试助手提供了一些内置功能。但我有时喜欢为我的助手编写非常轻量级的测试,这些测试不必在我的整个rails环境中加载。这样,测试可以在不到一秒钟的时间内运行,而不是加载rails环境所需的几秒钟

以下是一个例子:

require 'spec_helper_lite'
require_relative '../../app/helpers/application_helper'

describe ApplicationHelper do
  let(:helper) do
    class Helper
      include ApplicationHelper
    end
    Helper.new
  end

  it "formats an elapsed time as a number of minutes and seconds" do
    helper.elapsed_as_min_sec(90).should == "1min 30sec"
  end
end
我的spec_helper_lite.rb文件如下所示:

require 'rspec'
require 'rspec/autorun'

RSpec.configure do |config|
  config.order = "random"
end

我有点像rspec noob,你介意分享一个链接或一个如何模拟/存根的例子吗?你有什么问题?基本上,看看。由于
helper
可用,您可以存根
helper.controller
以返回具有已知
controller\u name
action\u name
的对象,然后测试您是否按预期处理了这些值。谢谢,这让我走上了正轨。哦,嘿,刚刚注意到其他一些事情。函数名为
body\u id
这一事实表明,您正试图为
元素创建
id
属性。永远不要这样做——因为任何文档中只有一个
元素,所以它永远不适合使用
id
元素。相反,更精细地模块化CSS和JS。