In questa domanda, userò un esempio di rubino, ma penso che sia una domanda generale.
Secondo il più popolare framework di test di Ruby (RSpec), il mocking di qualsiasi istanza di una classe ( allow_any_instance_of
) è un odore di progettazione.
In realtà, non sono d'accordo con questa affermazione.
Quindi, vorrei sapere come sarebbe il "modo migliore / corretto" (o qualcosa del genere) per implementare / testare una classe come questa di seguito, e testare se il metodo format_phone
sta formattando correttamente i numeri di telefono .
class SmsSender
def initialize(message)
@message = message
@client = Twilio::REST::Client.new(TWILIO_CREDENTIALS)
end
def send_to(phone)
return false unless validate_phone(phone)
@client.send({
from: '123',
to: format_phone(phone),
content: @message
})
end
end
Ecco come sarebbe il mio test:
expect_any_instance_of(Twilio::REST::Client).to receive(:send).with({ from: '123', to: '+10002225555', content: 'hi' })
SmsSender.new('hi').send_to('0002225555')