Cra*_*ker 6 ruby code-coverage ruby-on-rails rcov
这是我的控制器:
class MyController < ApplicationController
include MyHelper
def index
get_list_from_params do |list|
@list = list
respond_to do |format|
format.html
format.xml { render :xml => @list }
format.json { render :json => @list }
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
......它所依据的帮手:
module MyHelper
def get_list_from_params(param = :id, &on_success)
raw_id = params[param]
begin
id = Integer(raw_id)
rescue
render :template => "invalid_id", :locals => {:id => raw_id }
else
yield MyList.new(id)
end
end
end
Run Code Online (Sandbox Code Playgroud)
...和我的功能测试(使用Shoulda):
class MyControllerTest < ActionController::TestCase
context "MyController index" do
setup do
get :index
end
should_respond_with :success
end
end
Run Code Online (Sandbox Code Playgroud)
编辑我的rcov rake与官方常见问题解答中列出的完全相同:eigenclass.org
RCov(0.9.7.1)将控制器中的每一行列为"def index"为绿色,之后的每一行(包括所有"end")为红色/未执行.我知道当我的测试实际执行时,它会成功执行代码.
为什么RCov会给出不直观的结果?这里有什么我想念的吗?
我的猜测是 rcov 仅认为实际测试用例中运行的代码被测试“覆盖”。从技术上讲,您对“获取索引”的调用不在测试用例中,而是在设置块中。应该有一些有趣的设置范围问题,也许 rcov 不够聪明,无法意识到这一点。
尝试将代码放入测试用例块中(见下文)——只是为了看看这是否会改变事情。注意:我认为您不必像这样运行测试 - 只是看看它是否有效。
context "MyController index" do
should "respond with success" do
get :index
assert_response :success
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |