miy*_*shi 6 ruby ruby-on-rails minitest omniauth
我mini-test用于测试框架.我使用omniauthgem进行身份验证.我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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我想知道如果我在写测试时错过了一点.我等你的想法.提前致谢.
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
Run Code Online (Sandbox Code Playgroud)
由于没有更多信息,很难判断。
首先尝试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
Run Code Online (Sandbox Code Playgroud)
请告诉我们,我们可以编辑或更新答案。
据了解,Minitest 存在一些问题。我相信工作仍在进行中,不确定他们现在处于什么位置。这不是你,而是最小的。该解决方法在某些情况下有所帮助,也许对您也有帮助。