मैं सिनात्रा नियंत्रक में एक विधि को कैसे बुलाता हूं? - रूबी, आरएसपीसी, सीनात्रा

मैं परीक्षण करने की कोशिश कर रहा हूं कि एक विधि में बुलाया जाता हैरुपेक का उपयोग कर मेरा सिनात्रा नियंत्रक। मैं एक मिनी-प्रोजेक्ट के लिए ट्विटर का क्लोन बना रहा हूं, और यह सुनिश्चित करना चाहता हूं कि जब भी कोई नया उपयोगकर्ता साइन अप करे, तो एक ईमेल भेजा जाता है।

यह मेलगुन, एक रूबी मणि का उपयोग करके काम करता है, और एक बार जब कोई नया उपयोगकर्ता साइन अप करता है तो ईमेल भेज दिए जाते हैं।

समस्या परीक्षण में है।मैंने send_mail नामक नियंत्रक में एक विधि लिखी है जिसे उपयोगकर्ता साइन अप करते समय ही बुलाया जाता है। इस विधि की सामग्री को अनदेखा करें, वे इस प्रश्न के प्रयोजनों के लिए महत्वपूर्ण नहीं हैं। बस पता है कि यह काम करता है।

def send_email
RestClient::Request.execute(
url: "https://api:key-7af11fe0adc2a642e55d33744117e7d2"
"@api.mailgun.net/v3/sandbox1aad2b9369f348018e3b435a1026927c.mailgun.org/messages",
:method => :post,
:payload => {
:from => "Mailgun Sandbox <[email protected]>",
:sender => "Mailgun Sandbox <[email protected]>",
:to => params[:email],
:subject => "Welcome to Chitter",
:text => "Welcome to Adrian"s awesome Chitter site. " + params[:username] + ".Get Chittering!",
:multipart => true
},
:headers => {
:"h:X-My-Header" => "www/mailgun-email-send"
},
:verify_ssl => false
)
end

इस विधि (send_email) को नीचे दी गई 8 वीं पंक्ति पर पोस्ट अनुरोध में बुलाया जाता है।

  post "/users" do
@user = User.create(email: params[:email],
username: params[:username],
password: params[:password],
password_confirmation: params[:password_confirmation])

if @user.save
session[:user_id] = @user.id
send_email
redirect "/peeps"
else
flash.now[:errors] = @user.errors.full_messages
erb :"users/new"
end
end

मैंने परीक्षणों का एक गुच्छा लिखा है, यह जांचने के लिए कि ऐप भी विधि का जवाब देता है, और दूसरा यह जांचने के लिए कि नया उपयोगकर्ता साइन अप करते समय send_email विधि को बुलाया जा रहा है।

describe Chitter do
include Rack::Test::Methods

def app
Chitter.new!
end

it "has send_email method" do
expect(app).to respond_to :send_email
end

it "sends a message to the user when user signs up" do
allow_any_instance_of(RestClient::Request).to receive(:execute).with(any_args)
post "/users", params={email: "[email protected]",
username: "Adrian17",
password: "adrian1",
password_confirmation: "adrian1"}
expect(app).to have_received(:send_email)
end

हमारा पहला टेस्ट पास होता है (ऐप को send_email का जवाब देना चाहिए) लेकिन दूसरा वाला नहीं है। हमें त्रुटि संदेश यह कह रहा है कि विधि को नहीं दबाया गया है।

Failure/Error: expect(app).to have_received(:send_email)
#<Chitter:0x007f959e8e3088> expected to have received send_email, but that object is not a spy or method has not been stubbed.

इस पर कई घंटे बिताए गए हैं, आंखों के अलग-अलग जोड़े इसे जाने देते हैं, लेकिन हम जो भी नहीं करते हैं, वह इस परीक्षा पास करने में कामयाब रहा है। कोई मार्गदर्शन जहां हम गलत हो रहे हैं?

उत्तर:

जवाब के लिए 0 № 1
it "sends a message to the user when user signs up" do
allow_any_instance_of(RestClient::Request).to receive(:execute).with(any_args)
expect(app).to receive(:send_email)
post "/users", params={email: "[email protected]",
username: "Adrian17",
password: "adrian1",
password_confirmation: "adrian1"}
end

आपको उड़ना चाहिए!


संबंधित सवाल
सबसे लोकप्रिय