У меня есть почтовая программа, которая использует «open-uri».Как выкрикивать вызовы open-uri
require 'open-uri'
class NotificationMailer < ActionMailer::Base
def welcome(picasa_picture)
picture = picasa_picture.content.src
filename = picture.split('/').last
attachments.inline[filename] = open(picture).read
mail(
to: '[email protected]',
from: '[email protected]',
subject: 'hi',
)
end
end
Но когда я пытаюсь проверить что-нибудь класс, я получаю эту ошибку:
SocketError:
getaddrinfo: nodename nor servname provided, or not known
Я нашел SO сообщения: How to rspec mock open-uri и думал, что это поможет. Я дал это попробовать:
let(:pic_content) { double(:pic_content, src: 'http://www.picasa/asdf/asdf.jpeg') }
let(:picture) { double(:picture, content: pic_content) }
let(:open_uri_mock) { double(:uri_mock, read: true) }
subject { described_class.welcome(picture) }
it 'renders email address of sender' do
subject.stub(:open).and_return(open_uri_mock)
subject.from.should == [ sender_address ]
end
Я также попытался «should_receive» вместо «окурок», но это не помогло.
Как подавить открытый метод open-uri так, чтобы он (1) не пытался выйти в интернет и (2) не нарушил мои тесты?
Я не уверен, что вы гася открытый метод правого объекта здесь –
, насколько я могу вам сказать, 're stubbing после того, как вы вызвали метод, чтобы он не работал –
этот пост, кажется, думает, что вы делаете заглушку на ядре: https://stackoverflow.com/questions/3603256/rspec-how-to-stub-open –