簡體   English   中英

最小的測試和代碼覆蓋率

[英]minitest testing and code coverage

我使用mini-test來測試框架。 我使用omniauth gem進行身份驗證。 我使用simplecov進行代碼覆蓋。 我使用"bundle exec rake""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

沒有更多信息很難說清楚。

首先嘗試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有一些問題。 我相信它仍在進行中,不確定它們現在的位置。 它不是你,它是最小的。 在某些情況下,這種解決方法有所幫助,也許它對您有幫助。

根據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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM