أهلاً!
أريد إضافة دعم لرابط يوتيوب /shorts/.
تعديلي على الفئة YoutubeOnebox يعمل، ولكن يتطلب مني إضافة اختبار في youtube_onebox.rb واختباري لا يعمل.
على غرار اختبار “يمكن تحليل نتائج تضمين يوتيوب” (can parse youtube embed results)، أضفت هذا الكود:
it "can parse youtube shorts results" do
preview = expect(Onebox.preview('https://www.youtube.com/watch?v=wi2jAtpBl0Y').placeholder_html)
preview.to match(/From which sound/)
preview.to match(/hqdefault/)
end
كما أضفت هذا في بداية الملف، في before do:
stub_request(:get, "https://www.youtube.com/shorts/wi2jAtpBl0Y").to_return(status: 200, body: onebox_response("youtube-shorts"))
لم أقم باختبارات الوحدة من قبل، لذلك لا أفهم حقًا كل هذا العمل.
فشل اختباري:
Failures:
1) Onebox::Engine::YoutubeOnebox can parse youtube shorts results
Failure/Error:
http.request(request) do |response|
if cookie = response.get_fields('set-cookie')
# HACK: If this breaks again in the future, use HTTP::CookieJar from gem 'http-cookie'
# See test: it "does not send cookies to the wrong domain"
redir_header = { 'Cookie' => cookie.join('; ') }
end
redir_header = nil unless redir_header.is_a? Hash
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: GET https://www.youtube.com/embed/wi2jAtpBl0Y with headers {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Discourse Forum Onebox v2.9.0.beta12'}
You can stub this request with the following snippet:
stub_request(:get, "https://www.youtube.com/embed/wi2jAtpBl0Y").
with(
headers: {
'Accept'=>'*/*',
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'User-Agent'=>'Discourse Forum Onebox v2.9.0.beta12'
}).
to_return(status: 200, body: "", headers: {})
registered request stubs:
stub_request(:get, "https://www.youtube.com/shorts/wi2jAtpBl0Y")
stub_request(:get, "https://www.youtube.com/embed/KCyIfcevExE")
stub_request(:get, "https://www.youtube.com/playlist?list=PL5308B2E5749D1696")
stub_request(:get, "http://www.youtube.com/user/googlechrome")
stub_request(:get, "https://www.youtube.com/channel/UCL8ZULXASCc1I_oaOT0NaOQ")
stub_request(:get, "https://www.youtube.com/watch?v=21Lk4YiASMo")
stub_request(:get, "http://www.youtube.com/watch?v=21Lk4YiASMo")
stub_request(:get, "https://www.youtube.com/embed/21Lk4YiASMo")
stub_request(:get, "https://youtu.be/21Lk4YiASMo")
stub_request(:get, "https://www.youtube.com/watch?feature=player_embedded&v=21Lk4YiASMo")
============================================================
# ./lib/onebox/helpers.rb:83:in `block in fetch_response'
# ./lib/onebox/helpers.rb:69:in `fetch_response'
# ./lib/onebox/helpers.rb:28:in `fetch_html_doc'
# ./lib/onebox/engine/youtube_onebox.rb:21:in `parse_embed_response'
# ./lib/onebox/engine/youtube_onebox.rb:42:in `placeholder_html'
# ./lib/onebox/preview.rb:28:in `placeholder_html'
# ./spec/lib/onebox/engine/youtube_onebox_spec.rb:110:in `block (2 levels) in <main>'
# ./spec/rails_helper.rb:328:in `block (2 levels) in <top (required)>'
Finished in 0.89418 seconds (files took 5.04 seconds to load)
17 examples, 1 failure
Failed examples:
rspec ./spec/lib/onebox/engine/youtube_onebox_spec.rb:109 # Onebox::Engine::YoutubeOnebox can parse youtube shorts results
هل لديك أي فكرة لماذا يفشل؟
أيضًا، ماذا تفعل هذه الأجزاء في before do؟
onebox_response("youtube-embed")
السلسلة “youtube-embed” لا تبدو مستخدمة في أي مكان في كود Discourse باستثناء هنا. ما هو الغرض منها؟
لماذا توجد روابط /embed/ مرتين ولماذا يحتوي onebox_response على معامل سلسلة مختلف؟
stub_request(:get, "https://www.youtube.com/embed/21Lk4YiASMo")
.to_return(status: 200, body: onebox_response("youtube"))
stub_request(:get, "https://www.youtube.com/embed/KCyIfcevExE")
.to_return(status: 200, body: onebox_response("youtube-embed"))
