6

mini-test用于测试框架。我使用omniauthgem 进行身份验证。我simplecov用于代码覆盖率。"bundle exec rake"我使用or运行我的测试"rake minitest:controllers"。我举一个控制器的例子。当我运行时rake minitest:controllers,控制器代码覆盖率变为 100%。但是,当我运行时bundle exec rake,控制器代码覆盖率变为 60%。

SessionsController.rb 代码:

 class SessionsController < ApplicationController
   def create
     auth = request.env["omniauth.auth"]
     person=Person.find_by_provider_and_uid(auth.provider,auth.uid) || Person.create_with_omniauth(auth)
     redirect_to root_path
   end
end

SessionsController_test.rb

require "minitest_helper"

describe SessionsController do
  before do
    request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:identity] 
    @person = Fabricate.build(:person)
  end

  it "should create authentication" do
    assert_difference('Person.count') do
      post :create, :provider => "identity"
    end
    assert_redirected_to root_path @person
  end
end

我想知道如果我错过了写作考试的一分。我等你的想法。提前致谢。

编辑

minitest_helper.rb

require 'simplecov'
Simplecov.start

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)

require "minitest/autorun"
require "minitest/rails"
require "minitest/pride"
require 'database_cleaner'
require "minitest/rails/capybara"

require "minitest-mongoid"

DatabaseCleaner[:mongoid].strategy = :truncation
#OmniAuth.config.test_mode = true
OmniAuth.config.add_mock(:identity, {
    :uid => '12345'

})


class MiniTest::Spec
 before :each do
    DatabaseCleaner.start
  end

  after :each do
    DatabaseCleaner.clean
  end
end
4

2 回答 2

3

根据Simplecov 的文档,您只需在您的顶部添加这些行test/test_helper.rb

# test/test_helper.rb
require 'simplecov'
SimpleCov.start
# ...

也不要忘记在测试组中安装 simplecov gem:

# Gemfile
# ...
group :test do
  gem 'simplecov'
end

就是这样。

Rails 6:我遇到了 Rails 6 的一些问题并测试了并行化,因此您可以在以下位置停用它test/test_helper.rb

# test/test_helper.rb
# ...
class ActiveSupport::TestCase
  # ...
  # parallelize(workers: 2)
end
于 2019-06-17T09:02:39.160 回答
2

没有更多信息很难说。

首先尝试rake minitest:all用结果更新您的问题。

如果之前的测试没有得出肯定的结论,请尝试以下操作:

namespace :test do
  task :coverage do
    require 'simplecov'
    SimpleCov.start 'rails' # feel free to pass block
    Rake::Task["test"].execute
  end
end

让我们知道,我们可以编辑或更新答案。

众所周知,Minitest 遇到了一些问题。我相信它仍在进行中,不确定他们现在的位置。不是你,是最小的。该解决方法在某些情况下有所帮助,也许它也对您有所帮助。

于 2015-05-17T09:18:07.307 回答