添加metrics

This commit is contained in:
ccx1024cc 2017-01-03 10:33:36 +08:00
parent cf527d9087
commit ef6d8fda9b
8 changed files with 126 additions and 29 deletions

3
.gitignore vendored
View File

@ -4,9 +4,6 @@
# or operating system, you probably want to add a global ignore instead:
# git config --global core.excludesfile '~/.gitignore_global'
# Ignore bundler config.
/.bundle
# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

114
.metrics Normal file
View File

@ -0,0 +1,114 @@
# by default, your directory base name
# MetricFu.report_name = 'Something Convenient'
# cane
# Fails your build if code quality thresholds are not met
# dirs_to_cane: MetricFu::Io::FileSystem.directory("code_dirs"),
# options:
# abc_max: 15,
# line_length: 80,
# no_doc: "n",
# no_readme: "n",
# filetypes: ["rb"]
MetricFu.configuration.configure_metric(:cane) do |cane|
cane.enabled = false
end
# churn
# Identifies the file changes too frequently
# options :
# minimum_churn_count
# ignore_files
# start_date
# data_directory
# history
# report
# name
MetricFu.configuration.configure_metric(:churn) do |churn|
churn.enabled = true
churn.start_date = '6 months ago'
end
# flog
# measuring code complexity
# options :
# dirs_to_flog
# continue
# all
# quiet
MetricFu.configuration.configure_metric(:flog) do |flog|
flog.enabled = false
flog.dirs_to_flog = ['app']
end
# flay
# Flay analyzes code for structural similarities. Differences in literal
# values, variable, class, method names, whitespace, programming style,
# braces vs do/end, etc are all ignored. Making this totally rad.
MetricFu.configuration.configure_metric(:flay) do |flay|
flay.enabled = true
flay.dirs_to_flay = ['app', 'script']
# MetricFu has been setting the minimum score as 100 for
# a long time. This is a really big number, considering
# the default is 16. Setting it to nil to use the Flay default.
minimum_score = nil
end
# reek
# find code smell
MetricFu.configuration.configure_metric(:reek) do |reek|
reek.enabled = true
reek.dirs_to_reek = ['app']
dirs_to_reek = nil
end
# roodi
# find a large number of general issues, design issue
# options
# dirs_to_roodi
# roodi_config
MetricFu.configuration.configure_metric(:roodi) do |roodi|
roodi.enabled = true
roodi.dirs_to_roodi = ['app']
end
# SAIKURO
# Saikuro is a Ruby cyclomatic complexity analyzer
# optins :
# cyclo: "",
# filter_cyclo: "0",
# warn_cyclo: "5",
# error_cyclo: "7",
# formater: "text",
MetricFu.configuration.configure_metric(:saikuro) do |saikuro|
saikuro.enabled = true
saikuro.output_directory = 'tmp/metric_fu/scratch/saikuro'
saikuro.input_directory = ['app']
end
# code statics
# options
# additional_test_directories
# additional_app_directories
MetricFu.configuration.configure_metric(:stats) do |stats|
stats.enabled = true
end
# rails best practices
MetricFu::Configuration.run do |config|
config.configure_metric(:rails_best_practices) do |rbp|
# rbp.silent = true
# rbp.exclude = ["config/chef"]
end
end
# simplecover
# calculate coverage
MetricFu::Configuration.run do |config|
config.configure_metric(:rcov) do |rcov|
rcov.coverage_file = MetricFu.run_path.join("coverage/rcov/rcov.txt")
rcov.rcov_opts = ["--profile", "--rails", "--exclude /gems/,/Library/,spec"]
rcov.enable
rcov.activate
end
end

View File

@ -39,6 +39,11 @@ group :development, :test do
gem 'rspec-rails', '~> 3.5.2'
#把 Rails 生成测试数据默认使用的固件换成更好用的预构件
gem 'factory_girl_rails','~> 4.7.0'
# 安装分析工具metrics
gem 'simplecov'
gem 'simplecov-rcov-text'
gem 'metric_fu'
end
group :development do

0
coverage/rcov/rcov.txt Normal file
View File

View File

@ -44,8 +44,8 @@ ActiveRecord::Schema.define(version: 20161229084919) do
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category"
t.integer "project_id"
t.integer "category"
end
add_index "notes", ["user_id"], name: "index_notes_on_user_id"

View File

@ -26,9 +26,9 @@ RSpec.describe SessionsController, type: :controller do
expect(controller.session[:user_id]).to eq @user1.id
end
it 'should get ok and text: login success' do
it 'should get ok and text: ok' do
expect(response).to have_http_status :ok
expect(response.body).to eq 'login success'
expect(response.body).to eq 'ok'
end
end
@ -43,8 +43,8 @@ RSpec.describe SessionsController, type: :controller do
expect(controller.session[:user_id].nil?).to be true
end
it 'return with 200 and text: account or password is not correct' do
expect(response).to have_http_status :ok
it 'return with 401' do
expect(response).to have_http_status :unauthorized
expect(response.body).to eq 'account or password is not correct'
end

View File

@ -9,13 +9,13 @@ RSpec.describe UsersController, type: :controller do
describe 'GET #emailExist' do
it 'valid email' do
get :emailExist, email: user.email
expect(response.body).to eq 'not exist'
expect(response.body).to eq '0'
end
it 'duplicated email' do
user = create(:user_with_sequence_number)
get :emailExist, email: user.email
expect(response.body).to eq 'exist'
expect(response.body).to eq '1'
end
it 'should not throw exception with no email param' do

View File

@ -11,13 +11,6 @@ RSpec.describe User, type: :model do
expect(build(:user, name: nil)).not_to be_valid
end
it 'does not allow duplicate username' do
create(:user_with_sequence_number, name: 'ccx')
user_duplicated_name = build(:user_with_sequence_number, name: 'ccx')
user_duplicated_name.valid?
expect(user_duplicated_name.errors[:name].size).to eq(1)
end
it 'does not allow name length > 30' do
expect(build(:user_name_length_gt_30)).not_to be_valid
end
@ -28,13 +21,6 @@ RSpec.describe User, type: :model do
expect(build(:user, email: nil)).not_to be_valid
end
it 'does not allow duplicate email' do
create(:user_with_sequence_number, email: '1261138729@qq.com')
user_duplicated_email = build(:user_with_sequence_number, email: '1261138729@qq.com')
user_duplicated_email.valid?
expect(user_duplicated_email.errors[:email].size).to eq(1)
end
it 'does not allow email length > 50' do
expect(build(:user_email_length_gt_50)).not_to be_valid
end
@ -87,11 +73,6 @@ RSpec.describe User, type: :model do
expect(build(:user, phone: '1371234567')).to_not be_valid
end
it 'does not allow duplicated phone' do
create(:user)
expect(build(:user)).to_not be_valid
end
# 防js注入
it 'does not allow multiline' do
expect(build(:user, phone: '13712345\n78')).to_not be_valid