simple_cov在Rails应用程序中使用gem,我们可以在报告中包含我们未测试的文件吗?
如果有,怎么样?
如果不是,那些文件应该计入覆盖百分比,对吧?
我决定尝试使用simplecov gem.我认为这是很酷的工具,但我有一个问题:
我有模型用户,我有user_spec.rb,其中包含测试用例,但simplecov显示该模型的0%覆盖率.它显示其他型号的100%覆盖率,这是真的.我不明白User模型有什么问题.
class User < ActiveRecord::Base
extend Enumerize
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
STATUS_ACTIVE = :active
STATUS_BANNED = :banned
enumerize :status, in: [STATUS_ACTIVE, STATUS_BANNED], default: STATUS_ACTIVE
with_options inverse_of: :user, dependent: :destroy do
has_one :profile
has_many :articles
end
before_create :build_default_profile
private
def build_default_profile
build_profile
end
end
Run Code Online (Sandbox Code Playgroud)
user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
describe '#validations' do
it { should have_one(:profile).dependent(:destroy) }
it …Run Code Online (Sandbox Code Playgroud)
我想分析代码的测试覆盖率,因此,安装了simplecov gem.
我们的测试环境有两个单独的项目:REST API测试(Java + Rest-Assured)和Web UI测试(Java-Selenium).
如您所见,我们在rails app中没有单元测试,我们正在使用外部项目进行测试.
我按照教程中的描述配置了simplecov gem,并将其放在rails脚本中:
require 'simplecov'
SimpleCov.start 'rails'
puts "require simplecov"
Run Code Online (Sandbox Code Playgroud)
加载应用程序时,我看到我打印的字符串.
我运行了两个自动化测试项目,在rails日志中看到了他们的打印输出,但是我没有看到控制器/模型的任何覆盖,我看到一些gems和rails的初始化文件的小百分比.
我搜索网络,并尝试将代码短语放在boot.rb甚至puma.rb中,它返回相同的结果.
有任何想法吗?
编辑
没有任何帮助所有的评论,但我想出了一些非常有趣的东西,在所有情况下,我只看到标记为测试的方法的名称,而不是内容(在控制器中).
我试图将simplecov启动短语放在bin/rails,puma.rb,config.ru,environment.rb中,所有这些都没有给出所需的代码覆盖率结果.
我的覆盖率报告不是100%,因为我的类中有几个#inspect方法,我用它们进行调试.有没有办法配置SimpleCov忽略所有检查方法?
当使用 RSpec 将 simplecov 添加到 Rails 项目时,我会将其放在rails_helper.rb 的最顶部
require 'simplecov'
SimpleCov.start 'rails' do
add_filter '/spec/'
add_group 'Controllers', 'app/controllers'
add_group 'Models', 'app/models'
end
Run Code Online (Sandbox Code Playgroud)
让 simplecov 记录普通 ruby gem 的代码覆盖率所需的预期位置和代码是什么?
我正在开发一个小插件并包含simplecov.
在我的gem文件中,我有一行:
gem 'simplecov', :require => false, :group => :test
Run Code Online (Sandbox Code Playgroud)
在我的测试文件中,我将该行放在文件require "projectname/devuntil/rspec/spec_helper"
的最顶部.
在我的spec_helper.rb文件中,我在文件顶部添加了simplecov
if ENV['COVERAGE']
require 'simplecov'
require 'coveralls'
puts "require simplecov and coveralls"
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
SimpleCov::Formatter::HTMLFormatter,
Coveralls::SimpleCov::Formatter
]
SimpleCov.start do
add_filter 'spec/'
add_filter 'vendor/'
puts "Start simple coverage"
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试使用命令运行测试时,COVERAGE=true bundle exec rspec它显示:
[root@node1 logstash-input-imap]# COVERAGE=true bundle exec rspec
Coverage may be inaccurate; set the "--debug" command line option, or do JRUBY_OPTS="--debug" or set the "debug.fullTrace=true" option in your .jrubyrc
require simplecov and …Run Code Online (Sandbox Code Playgroud) 最近我正在使用rails项目,并使用simplecov生成代码覆盖率报告,我在下面得到了一个很好的报告.我知道这是一个简单的问题(我google了很多次但没有得到任何正确的解释)
任何人都可以解释点击/线的含义.
还可以说我有一个文件test.rb(100行代码),它没有被任何时候点击,现在让我们说一些test_script已经命中了一些文件test.rb,所以覆盖率会由
total no.of lines hit / total lines of code , (All files)
OR
lines hit / total lines of code (file1) .+.+....lines hit/ total line of code (file n) / total number of file count
Run Code Online (Sandbox Code Playgroud)

我有一个rails应用程序,在circleci中使用rspec运行parallel_test
在互联网上环顾四周,我把它添加到我的spec_helper.rb文件的开头:
if ENV['COVERAGE']
require 'simplecov'
# on circleci change the output dir to the artifacts
if ENV['CIRCLE_ARTIFACTS']
dir = File.join("..", "..", "..", ENV['CIRCLE_ARTIFACTS'], "coverage")
SimpleCov.coverage_dir(dir)
SimpleCov.merge_timeout 3600
SimpleCov.command_name "rspec_#{Process.pid.to_s}#{ENV['TEST_ENV_NUMBER']}"
end
SimpleCov.start 'rails'
end
Run Code Online (Sandbox Code Playgroud)
问题是,因此我为每个circleci实例获得了一个不同的文件夹:

我究竟做错了什么 ?