我试图在我的规范中为我的JRuby类存储Java静态方法,该类导入了一些Java库。我为方法调用收到以下错误:
Failure/Error: JCoDestinationManager.getDestination('properties')
ArgumentError:
Wrong number of arguments. Expected 0, got 1.
这是JCo Java静态方法。我创建了一个小的spec文件来尝试找出问题:
require 'rails_helper'
describe SapClient do
let(:destination) { double(Java::ComSapConnJcoRt::RfcDestination) }
before do
allow(JCoDestinationManager).to receive(:getDestination).and_return destination
end
it 'can be created' do
c = SapClient.new
expect(c).to_not be_nil
end
end
如果我像这样添加with子句,我仍会得到相同的结果。
allow(JCoDestinationManager).to receive(:getDestination).with('properties').and_return destination
对我来说,奇怪的是我只在rails中遇到这个项目。如果我将代码复制到Sinatra项目并在那里运行这些规范,一切都很好。我创建了一个新的Rails项目和一个新的Sinatra项目并安装了相同版本的RSpec,经过验证的RSpec模拟版本是相同的,等等仍然看到了行为上的差异。
当我撬开并观察当我打电话时发生的事情
JCoDestinationManager.getDestination
没有参数,我得到了我定义的模拟目的地。如果我注释掉allow语句,我会看到一个真正的RfcDestination被创建。
在搜索时,我看到的东西似乎与我在这里观察的内容差不多来自https://github.com/rspec/rspec-mocks/issues/919,但显然这个问题的解决方案是一个已经解决的问题。