は、私は私が持っているオブジェクトには、OpenSSL :: SSL ::のSSLSocketのインスタンスであるかどうかをテストしたい今 RSpec instance_double respond_to?奇妙な行動
let(:ssl_socket) { instance_double(OpenSSL::SSL::SSLSocket) }
を持っています。 be_an_instance_of matcherを使用したくないのです。なぜなら私のテストでは "ダックタイピング"のようにチェックする必要があるからです。だから私は、その後InstanceDouble意志オブジェクトが「SSL_VERSION」メソッド
it 'should change socket to ssl' do
#do some stuff and set socket = ssl_socket
expect(socket).to respond_to(:ssl_version)
end
に応答するかどうかそれは
expected #<InstanceDouble(OpenSSL::SSL::SSLSocket) (anonymous)> to respond to :ssl_version
を動作しません。しかし、私はそれが他のマッチャーに
it 'should change socket to ssl' do
#do some stuff and set socket = ssl_socket
expect(socket).to receive(:ssl_version)
socket.ssl_version
end
を使用しないかどうかを知りたいです実際には:ssl_versionメソッドがOpenSSL :: SSL :: SSLSocketインスタンスに存在するかどうかをチェックします。これはRespondTo matcherの機能かバグですか? Receive matcherを使うべきですか?
あなたの 'let'文に基づいて' socket'を 'ssl_socket'にしてはいけませんか? – engineersmnky
はい、それをテストしたい、つまり 'do_some_stuff'の後に' socket'(または正確には 'object.socket')を' ssl_socket'に設定する必要がありますが、 'nil'でもかまいません。 –