【问题标题】:How do I get code coverage stats for my Sinatra app?如何获取 Sinatra 应用程序的代码覆盖率统计信息?
【发布时间】:2011-12-18 23:10:41
【问题描述】:

我编写了一个 Sinatra 应用程序(网站),我想收集该网站代码的代码覆盖率信息。我是 Ruby 新手,但 Google 告诉我 rcov 是一个很好的代码覆盖工具。不幸的是,我可以在网上找到的所有信息都只显示了如何获取有关测试用例的代码覆盖率信息——我想要关于我的网站本身的代码覆盖率信息。

我要分析的特定站点文件位于“sdk”和“sdk/vendor”目录中,因此我通常会使用“ruby site.rb”运行我的站点,但我尝试了以下操作:

rcov -Isdk -Isdk/vendor site.rb

它显示了 Sinatra 启动文本,但随后立即退出,而不是像我的 Sinatra 应用程序通常那样等待网络请求。

有人能告诉我在启用代码覆盖的情况下运行我的网站的技巧吗?我想运行该站点,用一系列请求点击它,然后停止该站点;之后,我想查看整个请求系列中累积的代码覆盖率统计信息。

我目前使用的是 Ruby 1.8.7。

【问题讨论】:

  • 您能否详细说明一下您所理解的“应用程序代码覆盖”?因为传统上它意味着测试用例的覆盖率
  • 我有一个使用 Sinatra 实现的网站。我想练习该站点,并测量在该练习期间该站点的代码运行了多少。我没有使用任何测试框架来自动执行网站。
  • 看起来这应该很简单,但我只是缺少一些关键的见解。

标签: ruby sinatra code-coverage rcov


【解决方案1】:

SimpleCov 非常适合这一点。 如果你使用 RSpec 和 Bundler 设置超级简单

在你的 gem 文件中

gem 'simplecov'

然后

$ bundle install

在 spec/spec_helper.rb 中(在其他任何东西之前)

require 'simplecov'
SimpleCov.start

然后:$ rspec spec

Simplecov 在coverage/index.html 生成一个非常好的覆盖率报告

【讨论】:

  • 我没有使用 rspec - 正如我在问题中指出的那样,我希望在我的站点文件上覆盖代码,而不是在测试上。
  • 很公平。我想我误解了这个问题。您是说要测试给定某个请求或一组请求正在执行哪些代码行?我建议简单地编写一些单元或集成测试。除了测试套件之外,在什么情况下拥有覆盖率报告会很有用?
  • 没错。我正在测试一些在相当复杂的环境中运行的服务器端代码,其中包含浏览器、Sinatra 服务器和其他远程 Web 服务之间的交互。很可能我可以使用其中一种 Ruby 测试工具并模拟出所有未直接测试的配置,但我是 Ruby 新手,所以我发现简单地实现复杂的系统更简单、更安全然后从浏览器中锻炼它。完成之后,现在我很好奇我正在测试的 Ruby 代码中有多少实际受到了测试的影响。
  • 明确一点,在 Sinatra 中运行的一些 Ruby 代码是我的测试代码,还有一些是我正在测试的库。
【解决方案2】:

也许你可以看看SimpleCov,它宣传了它在任何类型的覆盖分析中的简单用法。

【讨论】:

  • 看起来不错,但我目前使用的是 Ruby 1.8.7,看起来 SimpleCov 只支持 1.9+。我将使用此信息更新我上面的问题描述。
猜你喜欢
  • 2019-02-25
  • 2021-09-26
  • 2015-01-12
  • 2015-08-10
  • 2023-01-17
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多