- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置 SimpleCov 为 3 个应用程序生成报告,这些应用程序从本地 gem 共享大部分代码(模型、 Controller ),但每个应用程序使用的代码规范都在每个 ./spec 中,而不是在 gem 本身。
为了更清楚的例子。当我在使用本地 gem 的共享模型的 app_1 中运行 bundle exec rspec spec 时,我想获得(准确的)此 app_1 在 ./spec 中具有的所有规范的报告。
本地 gem 也有一些专用于 app_2 的模型,位于命名空间内,因此当我在 app_1 内运行测试套件时,我想跳过这些文件的报告。
我正在尝试使用类似于 app_1/spec/spec_helper 中的以下代码来实现此目的。
# This couple of lines are needed to generate report for the models, etc. inside the local gem.
SimpleCov.adapters.delete(:root_filter)
SimpleCov.filters.clear
SimpleCov.adapters.define 'my_filter' do
root = SimpleCov.root.split("/")
root.pop
add_filter do |src|
!(src.filename =~ /^#{root.join("/")}/)
end
add_filter "/app_2_namespace/"
end
if ENV["COVERAGE"] == "true"
SimpleCov.start 'rails'
end
这有效,直到出现一些问题。
为什么我对 gem 内的模型获得 85% 的覆盖率,但规范在 app_2 内(我在 app_1 内运行规范)。
第一次出现问题是在我尝试改进该模型时,所以我单击了它的报告并查看了哪些行未被覆盖,然后我尝试修复它们,在 app_2/spec/namespace/上为它们编写测试my_model_spec.rb.
但这没有任何区别,我尝试了更积极的测试并删除了规范文件中的所有内容,但不知何故我仍然获得了 85% 的覆盖率,因此 my_model_spec.rb 与my_model.rb 的覆盖率结果。有点出乎意料。
但是由于这个文件在 app_2 上,我决定在 app_1 spec_helper 的 SimpleCov.start block 上添加一个过滤器,例如:
add_filter "/app_2_name_space/"
然后我移动到 app_2 文件夹并开始设置 SimpleCov 并查看我会在这里得到什么结果。结果他们更奇怪了。
对于同一模型,我获得了 100% 的覆盖率,我对清空 my_model_spec.rb 文件进行了相同的测试,但仍然获得了 100% 的覆盖率。所以这真的很糟糕,或者我不明白什么。
这是如何工作的?(with the Ruby 1.9 Coverage module 你说,好吧,当我在本地运行官方文档中的示例时,我得到了不同的结果,所以我认为那里有错误或过时的文档)
ruby-doc: {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}
locally: {"foo.rb"=>[1, 1, 10, nil, nil, 1, 0, nil, 1, nil]}
我希望报告不会显示在应用代码某处评估的行的积极结果,无论在何处。
我认为预期的行为是模型的结果与其规范相关, Controller 的结果也是如此。
是这样吗?如果是这样,为什么我会得到这个奇怪的结果。
或者您认为我的应用程序的结构可能会与 SimpleCov 和 Coverage 混淆?
感谢您花时间阅读本文,如果您需要更详细的信息,请询问。
最佳答案
关于您对模型被 100% 覆盖的困惑,因为我不确定我是否理解正确:Coverage(以及 SimpleCov)无法知道您的代码是从规范执行还是“其他地方”执行”。假设我有一个方法“foo”和一个调用 foo 的方法“bar”。如果我在我的规范中调用 bar,当然 foo 也会显示为已覆盖。
关于您的一般问题:我认为报告覆盖率应该是可能的。仅仅因为源代码位于与您的项目根目录不同的位置,不应导致覆盖率报告丢失。
基本配置中的两件事:删除基本适配器(第 2 行)是不必要的,因为适配器基本上是美化的配置 block ,此时您已经执行了它(因为它在加载 Simplecov 时被调用)。重置过滤器应该就足够了。
此外,您定义的自定义适配器未被使用。请参阅 README 以了解如何正确设置适配器,但我认为当您现在开始覆盖运行时,只需在 SimpleCov 配置 block 中使用它就可以了:
SimpleCov.start 'rails' do
your_custom_config
end
不过,您可能需要的是所有应用的合并覆盖率报告。为此,您必须首先在配置 block 内为每个规范套件定义一个 command_name,如下所示:command_name 'App1 Specs'
。
您还必须定义一个中央 coverage_path
,它将存储您在应用程序套件中的覆盖率报告。假设您有 ~/projects/my_project/app[1-3]
,然后将其放入 my_project/coverage
可能有意义。这将导致您的不同测试套件结果合并到一个报告中,就像将 SimpleCov 与 Cucumber 和 RSpec 一起使用时一样。合并的默认超时时间约为 10 分钟,因此您可能需要在配置中使用 merge_timeout 3600
将其设置为更高的值(这些是秒)。有关这些配置选项的细节,请再次查看 README 和 SimpleCov::Configuration 文档。那里对这些内容进行了相当详细的概述。
因此,总而言之,您的每个应用都应该看起来像这样:
require 'SimpleCov'
SimpleCov.start 'rails' do
reset_filters!
command_name 'App1 Spec'
coverage_path File.dirname(__FILE__) + '../../coverage' # Assuming this is in my_project/app1/spec/spec_helper.rb
merge_timeout 3600
end
接下来您可能想要添加过滤器以按路径拒绝所有非项目 gem,并且您应该启动并运行。
关于ruby-on-rails - 具有多个应用程序的 SimpleCov - 或者简而言之,Simplecov 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501607/
我正在尝试设置 SimpleCov 为 3 个应用程序生成报告,这些应用程序从本地 gem 共享大部分代码(模型、 Controller ),但每个应用程序使用的代码规范都在每个 ./spec 中,而
我的覆盖率报告不是100%,因为我的类中有几个#inspect方法用于调试目的。有没有一种方法可以配置SimpleCov以忽略所有检查方法? 最佳答案 我知道我迟到了,但是我必须做同样的事情并找到了解
我在使用简单的 cov 和 rspec 时遇到了非常奇怪的问题。我的 rails_hlper 文件中有以下内容 require 'simplecov' SimpleCov.start 'rails'
如何将我的库的文件夹和子文件夹添加到 simplecov 生成覆盖率? 我的 SimpleCov 配置 SimpleCov.start do add_group 'Bot', 'app/b
我正在使用“simplecov”和“coveralls”ruby gems,但 simplecov 生成的报告与 coveralls 生成的报告不匹配。 我发现工作服并没有忽略包裹在 中的代码 # :
在澄清了 simplecov 如何确定一条线是否已被测试执行之后。 我有以下方法: def over? end_at < Time.zone.now end 其中 end_at 是对象的 Acti
我正在研究一个小 gem 并包含 simplecov到 spec_helper.rb 两行: require 'simplecov' SimpleCov.start 当我运行 rspec 测试时,si
我正在尝试像这样测试 minitest 文件: COVERAGE=true ruby -Itest test/views/info_pages_test.rb COVERAGE=true ruby -
我正在尝试像这样测试 minitest 文件: COVERAGE=true ruby -Itest test/views/info_pages_test.rb COVERAGE=true ruby -
当通过 rake 运行我的 rails 4 rspec 套件时,一切正常,但是当尝试运行 rake simplecov 时,我遇到了数百次失败,所有这些都带有 NoMethodError 类似于:
我安装了simplecov gem并添加了 require 'simplecov' SimpleCov.start 到 spec_helper.rb 文件,现在如果我在我的 some_file_sp
我正在尝试在 Ruby 项目中使用 simplecov gem。然而我失败得很惨。这是我到目前为止所做的。 我的项目结构是:项目文件夹 - 库 - 测试 我的测试在测试中,源代码在 lib 中。我在测
我正在开发一个小插件,其中包括 simplecov。 在我的 gem 文件中有一行: gem 'simplecov', :require => false, :group => :test 在我的测试
我们有一套 Selenium 测试。我想使用 SimpleCov 来覆盖这些测试的服务器端覆盖范围。首先,这是一种常见的方法吗?我在 SimpleCov/Selenium 上找不到任何内容。也许 Si
我有一个带有基于 Grape 的 API 的 Rails 4.2 应用程序。我开始使用 Rpsec 为它编写测试。我的测试效果很好,测试了我的预期。但是当我在终端运行 rspec 时,Simpleco
我有一个带有基于 Grape 的 API 的 Rails 4.2 应用程序。我开始使用 Rpsec 为它编写测试。我的测试效果很好,测试了我的预期。但是当我在终端运行 rspec 时,Simpleco
我在我的 Rails 应用程序中使用 SimpleCov 作为覆盖工具。在这个应用程序中,代码被划分为引擎,我根据一些输入将引擎包含到我的应用程序中。 simplcov 的问题是它只为应用程序内部的代
Ruby-2.0.0p247ActiveRecord-4.0.1 cucumber 1.3.10Aruba-0.5.3SimpleCove-0.8.2 我们在一个仍然使用 ActiveRecord 的
有没有人有使用 Cucumber 和代码覆盖工具 SimpleCov 的经验?我在 env.rb 文件中添加了以下几行,这样 Cucumber 就会触发 SimpleCov- require 'sim
你能告诉我如何设置 simplecov 来测试带有 rspec 的模型和仅带有 cucumber 的 Controller 吗? 我不喜欢 rspec 和 cucumber 覆盖混合在一起......
我是一名优秀的程序员,十分优秀!