![](/img/trans.png)
[英]Rspec-rails 4 error: ActiveModel::ForbiddenAttributesError
[英]How to Raise Runtime Error in Rspec-Rails
我必须测试出现一些错误的代码,我尝试了几种技术但都失败了。 class的结构定义如下:
架构控制器:
class SchemasController < ApplicationController
def index
@get_schema = Api::AnalyticsQueryBuilderMetadataService::Schema.show
end
end
Api -> AnalyticsQueryBuilderMetadataService -> Schema.rb文件下的显示方法:
def self.show
params = { 'limit' => 40 }
response = Api::Connection.initiate_request('entities', params)
if response.nil?
Rails.logger.error 'Data not found for ClientId '
raise 'Data not found'
else
get_schema(response)
end
end
我为 schema_spec.rb 编写的 Rspec 测试:
require 'rails_helper'
require 'spec_helper'
RSpec.describe Api::AnalyticsQueryBuilderMetadataService::Schema do
describe 'GET all schema' do
before do
# allow_any_instance_of(SchemasController).to receive(:connection).and_return({})
#binding.pry
allow(Api::Connection).to receive(:initiate_request).and_return(nil)
end
context 'When no json body is passed' do
it 'Raises NoMethodError' do
# obj = SchemasController.new
result = Api::AnalyticsQueryBuilderMetadataService::Schema.show()
# expect {result}.to raise_error(RuntimeError)
expect{result}.to raise_error
end
end
end
end
但它给出的错误是:
Failures:
1) Api::AnalyticsQueryBuilderMetadataService::Schema GET all schema When no json body is passed Raises NoMethodError
Failure/Error: raise 'Data not found'
RuntimeError:
Data not found
# ./app/lib/api/analytics_query_builder_metadata_service/schema.rb:22:in `show'
# ./spec/lib/api/analytics_query_builder_metadata_service/schema_spec.rb:17:in `block (4 levels) in <top (required)>'
Finished in 2.3 seconds (files took 5.63 seconds to load)
44 examples, 1 failure
Failed examples:
rspec ./spec/lib/api/analytics_query_builder_metadata_service/schema_spec.rb:15 # Api::AnalyticsQueryBuilderMetadataService::Schema GET all schema When no json body is passed Raises NoMethodError
帮我解决这个问题。
来自文档;
使用 raise_error 匹配器指定代码块引发错误。
这意味着块中的代码应该是引发错误的代码,但在您的情况下,当您声明result
变量时会引发错误。
要使其工作,您可以跳过变量声明并将变量值作为expect
块传递;
expect { Api::AnalyticsQueryBuilderMetadataService::Schema.show }
.to raise_error(StandardError, 'Data not found')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.