如何在 Rails 5 中使用 Rspec 测试 wash_out 控制器
How to test wash_out controller with Rspec in Rails 5
我正在使用 wash_out 创建一个肥皂网络服务,这是我的控制器:
class SignerController < ApplicationController
soap_service
soap_action 'xmlSign', args: {
xml: :string,
certificate: :string
},
return: {
signed_xml: :string,
error: :string
},
to: :xml_sign
def xml_sign
render soap: {
signed_xml: "TODO"
}
rescue
render soap: {
error: $!.message
}
end
end
以下 http://blog.johnsonch.com/2013/04/18/rails-3-soap-and-testing-oh-my/ 我写了这个测试:
require 'rails_helper'
require 'savon'
RSpec.describe SignerController, type: :controller do
HTTPI.adapter = :rack
HTTPI::Adapter::Rack.mount 'app', Signer::Application
it 'signs an xml' do
application_base = "http://app"
client = Savon::Client.new({:wsdl => application_base + signer_wsdl_path })
result = client.call(:xmlSign, xml: 'xml', certificate: 'cert')
result.body[:xml_sign][:value].should_not be_nil
end
end
但是 rspec 总是抛出这个错误:
NoMethodError:
undefined method `element_children' for nil:NilClass
# ./spec/controllers/signer_controller_spec.rb:12:in `block (2 levels) in <top (required)>'
我正在使用 rails 5.1.5、wash_out 0.12、httpi 2.4.2 和 savon 2.11.2
我该如何解决这个问题?
对我有用的是将 "render_views" 添加到控制器规范中。例如
RSpec.describe SoapController, type: controller do
render_views # added render_views
HTTPI.adapter = :rack
HTTPI::Adapter::Rack.mount 'application', PhoneDialogue::Application
it 'signs an xml' do
application_base = "http://app"
client = Savon::Client.new({:wsdl => application_base + soap_wsdl_path })
result = client.call(:xmlSign, xml: 'xml', certificate: 'cert')
result.body[:xml_sign][:value].should_not be_nil
end
end
我正在使用 wash_out 创建一个肥皂网络服务,这是我的控制器:
class SignerController < ApplicationController
soap_service
soap_action 'xmlSign', args: {
xml: :string,
certificate: :string
},
return: {
signed_xml: :string,
error: :string
},
to: :xml_sign
def xml_sign
render soap: {
signed_xml: "TODO"
}
rescue
render soap: {
error: $!.message
}
end
end
以下 http://blog.johnsonch.com/2013/04/18/rails-3-soap-and-testing-oh-my/ 我写了这个测试:
require 'rails_helper'
require 'savon'
RSpec.describe SignerController, type: :controller do
HTTPI.adapter = :rack
HTTPI::Adapter::Rack.mount 'app', Signer::Application
it 'signs an xml' do
application_base = "http://app"
client = Savon::Client.new({:wsdl => application_base + signer_wsdl_path })
result = client.call(:xmlSign, xml: 'xml', certificate: 'cert')
result.body[:xml_sign][:value].should_not be_nil
end
end
但是 rspec 总是抛出这个错误:
NoMethodError:
undefined method `element_children' for nil:NilClass
# ./spec/controllers/signer_controller_spec.rb:12:in `block (2 levels) in <top (required)>'
我正在使用 rails 5.1.5、wash_out 0.12、httpi 2.4.2 和 savon 2.11.2
我该如何解决这个问题?
对我有用的是将 "render_views" 添加到控制器规范中。例如
RSpec.describe SoapController, type: controller do
render_views # added render_views
HTTPI.adapter = :rack
HTTPI::Adapter::Rack.mount 'application', PhoneDialogue::Application
it 'signs an xml' do
application_base = "http://app"
client = Savon::Client.new({:wsdl => application_base + soap_wsdl_path })
result = client.call(:xmlSign, xml: 'xml', certificate: 'cert')
result.body[:xml_sign][:value].should_not be_nil
end
end