- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有基于 Grape 的 API 的 Rails 4.2 应用程序。我开始使用 Rpsec 为它编写测试。我的测试效果很好,测试了我的预期。但是当我在终端运行 rspec
时,Simplecov 没有显示 api 文件的正确覆盖范围,如下图所示。
目录/lib/api/app
中的文件确实 有一些覆盖范围。但是 Simplecov 将它们显示为 0% 覆盖。
为了比较,我使用内置的覆盖工具在 RubyMine 中运行规范,它显示了正确的覆盖:
所以,我在这里遗漏了什么吗? simplecov 有什么问题?
这是我的 rails_helper.rb
:
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require 'simplecov'
SimpleCov.start 'rails'
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.include RSpec::Rails::RequestExampleGroup, type: :request, file_path: /spec\/api\/v1/
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = false
config.infer_spec_type_from_file_location!
Faker::Config.locale = 'pt-BR'
end
这是 API 端点之一,trips.rb
:
module Api
module App
class Trips < Grape::API
include Grape::Kaminari
resource :trips do
desc 'Return a list of trips of a vehicle.'
params do
requires :vehicle_id, type: Integer, desc: 'id of the vehicle'
optional :page, type: Integer, desc: 'Page of registers. Default to 1 (first page).'
optional :per, type: Integer, desc: 'Number of registers per page. Default to 25.'
end
get do
vehicle = Vehicle.find params[:vehicle_id]
if vehicle.user == current_user
trips = Trip.where(vehicle_id: vehicle.id ).order(started_at: :desc)
present paginate(trips), with: Entities::Trip
else
error!('Unauthorized', 401)
end
end
desc 'Return a Trip'
params do
requires :id, type: Integer, desc: 'id of the Trip'
end
route_param :id do
get do
trip = Trip.find params[:id]
if trip.vehicle.user == current_user
present trip, with: Entities::Trip
else
error!('Unauthorized', 401)
end
end
end
end
end
end
end
这是一个应该 100% 覆盖的示例规范 (trips_spec.rb
):
describe Api::App::Trips do
include ApiHelpers
let(:user) { create(:user) }
let(:user2) { create(:user) }
let(:vehicle) { create(:vehicle, user_id: user.id) }
let(:vehicle2) { create(:vehicle, user: user2) }
let(:trip) { create(:trip, vehicle: vehicle) }
let(:trip2) { create(:trip, vehicle: vehicle2) }
let(:auth_headers) { user.create_new_auth_token }
describe 'GET /api/v1/trips/:id' do
context 'when not authenticated' do
it 'returns 401 unauthorized' do
get "/api/v1/trips/#{trip.id}"
expect(response).to have_http_status(401)
end
end
context 'when user owns the vehicle' do
it 'returns a trip by id' do
get "/api/v1/trips/#{trip.id}", nil, auth_headers
expect(response.status).to eq(200)
expect(json_response).to be_an Hash
end
end
context 'when vehicle is from another user' do
it 'returns error 404' do
get "/api/v1/trips/#{trip2.id}", nil, auth_headers
expect(response.status).to eq(401)
end
end
end
describe 'GET /api/v1/trips' do
context 'when user owns the vehicle' do
it 'returns a list of trips by vehicle id' do
get "/api/v1/trips?vehicle_id=#{vehicle.id}", nil, auth_headers
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
end
context 'when vehicle belongs to another user' do
it 'returns error 404' do
get "/api/v1/trips?vehicle_id=#{vehicle2.id}", nil, auth_headers
expect(response.status).to eq(401)
end
end
end
end
最佳答案
所以,我发现了问题所在:我在 rails_helper.rb
上调用 Simplecov。调用它的正确位置是在 spec_helper.rb
的开头。
关于ruby-on-rails - SImplecov - Grape API 的测试覆盖率不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39756498/
我的 Grape 端点中有这样一行来检查 POST 正文的内容,以提供测试端点: return 'OK' if request.body.string == 'TEST' 在我笔记本电脑上的开发环境中
我正在尝试在没有 grape-api gem 的情况下使用 grape-entity。所以只需将它用作原始 Rails Controller 的序列化器即可。 当尝试通过以下方式展示我的资源时: 呈现
在 Grape 中,如果您使用 错误! 方法它会抛出一个错误并且永远不会调用 Grape::Endpoint “after”回调。 我希望应用程序在出错时调用后 Hook !已被调用。 我添加了这个中
我正在尝试使用葡萄来制作 Rest API。 为此,我在一个目录中创建了一个 config.ru 文件: require 'rubygems' require 'rack' require './gr
我想做的是在葡萄和葡萄实体 gem 之间重用类型和描述。 在文档中我阅读了以下内容: You can use entity documentation directly in the params b
我想在我的 groovy 程序中使用 @Grape,但我的程序由几个文件组成。 Groovy Grape page上的例子所有人似乎都假设您的脚本将由一个文件组成。我怎样才能做到这一点?我应该将它添加
我正在尝试使用org.xhtmlrenderer:core-renderer:R8pre2在常规脚本中,但我收到链接错误: Caught: java.lang.LinkageError: loader
我需要创建一个POST,可以在同一请求中上传多个文件,但我不知道如何用grape编写它。现在只上传一个文件,这就是我正在做的事情,并且工作正常: desc 'Creates a new attachm
对于我的其中一种方法,以下方法不起作用。我几乎直接从官方文档中复制了所有内容: params do requires :authenticationType, type: Array[String],
如何让 Grape 中的多个路由参数在 grape 中工作? 我可以使这条路线可行: .../api/company/:cid 但是当我尝试这样做时: .../api/company/:cid/mem
您如何配置 Grape 以在默认位置之外的位置查找自定义配置文件 ~/.groovy/grapeConfig.xml ?不幸的是,官方文档位于 http://groovy.codehaus.org/G
我相信我已经正确配置了所有内容,这样 grape 应该询问存储库是否有新的修订版,但事实并非如此。只要 jar 存在于 .groovy/grapes 中,它就会使用它。 我正在通过我们应用程序的 AP
我对 Ruby 有点陌生,但我在 Ruby 中使用 Grape API 编写了以下代码。每次点击 GET/api/v1/foo 时,我都会调用 @data = YAML.load(),在 Grape
我使用 Ember 作为我的前端和 Grape API 来为我的 API 提供服务。 前端发送类似: { "service"=>{ "name"=>"Name", "duratio
我在部署从 groovy 脚本创建的 JAR 时遇到问题,我认为这是因为在脚本中我使用 Grape 的 Grab 功能来引入一些库,然后当我构建 JAR 时,这些库是'包含在类路径或任何东西中。 我怎
因此,我正在使用 Rails 4 和 Grape Api 开发这个系统。基本上,它汇总了有关在车辆上执行的维护服务的信息。我的模型定义如下: # service.rb class Service <
我正在使用 Grape redtful-api。我无法继承 Grape 中的 common_params。我定义了共同 _params 类 API1 并在 API2 中调用它会引发错误。如何更改代码以
我有一个 format :xml Grape::API 对于删除请求,我想返回一个空响应。 我尝试输入的所有内容,true,false,nil,它都会尝试转换为 xml。我该怎么做呢? 谢谢 最佳答案
我正在尝试使用 Rails 和 Grape 构建一组 API。用户模型如下: { "email": "foo@bar.com" "name": "Foo Bar" } 现在,在 API
这个问题已经有答案了: Groovy - Grab - download failed (9 个回答) 已关闭 6 年前。 我有一个 Groovy 文件,其中包含以下代码: @Grab(group='
我是一名优秀的程序员,十分优秀!