Прямо сейчас вы проверяете, что Resolv::DNS
получает open
возвращает ваше mock
, но, поскольку вы, похоже, пытаетесь проверить, что макет dns
получает сообщения, вам необходимо поставить метку на метод и предоставить ему объект для выдачи
Попробуйте вместо этого:
dns = mock
dns.expects(:getresources)
.with(subject.cname_origin(true), Resolv::DNS::Resource::IN::CNAME)
.once
::Resolv::DNS.stub :open, [Resolv::DNS::Resource::IN::CNAME.new(subject.cname_destination)], dns do
# whatever code actually calls the "code being tested"
end
dns.verify
Второй аргумент для заглушки - это возвращаемое значение заглушки, а третий аргумент для stub
- это то, что будет передано блоку на месте оригинала получена.
В RSpe c синтаксис немного проще (и более семантичен c) такой, что:
dns = double
allow(::Resolv::DNS).to receive(:open).and_yield(dns)
expect(:dns).to receive(:getresources).once
.with(subject.cname_origin(true), Resolv::DNS::Resource::IN::CNAME)
.and_return([Resolv::DNS::Resource::IN::CNAME.new(subject.cname_destination)])
# whatever code actually calls the "code being tested"