أعمل على إضافة تكملة (plugin) تضيف نموذجًا (model). أحاول كتابة اختبارات (specs) تتأكد من أن النموذج (والمتحكم؟) يتصرفان كما هو متوقع.
هذا الكود في مكتبة Ansible يقوم بنجاح بإرسال طلب PUT إلى هذا المسار ويحدّث حقلًا في النموذج/السجل:
headers = {
'Api-Key': discourse_api_key,
'Api-Username': discourse_api_username,
}
payload = {
"server[request_status]": status
}
url = "%spfaffmanager/servers/%s" % (discourse_url, server_id)
# raise Exception(url)
result = requests.put(url, data=payload, headers=headers)
هذا هو الاختبار الذي أحاول كتابته لاختبار التحديثات على ذلك المسار. أنا مشوش لأن لدي عددًا هائلاً من عبارات puts في المتحكم (controller) ولا تظهر أي منها، بينما تظهر عبارات puts في النموذج (مثل تلك الموجودة في دالة تُستدعى بواسطة before_save) في مخرجات rake autospec التي أراها.
أفضل تخمين لدي هو أنني أرتكب خطأً في:
# frozen_string_literal: true
require 'rails_helper'
describe Pfaffmanager::ServersController do
fab!(:user) { Fabricate(:user) }
fab!(:admin) { Fabricate(:admin) }
fab!(:another_user) { Fabricate(:user) }
fab!(:trust_level_2) { Fabricate(:user, trust_level: TrustLevel[2]) }
before do
Jobs.run_immediately!
end
it 'can update status' do
request_status = 'new status'
sign_in(admin)
s=Pfaffmanager::Server.createServerFromParams(user_id: user.id,
hostname: 'bogus.invalid' , request_status: 'not updated')
puts "can update status created server id: #{s.id}"
params = {server: {request_status: request_status}}
expect {
put "/pfaffmanager/servers/#{s.id}", params: params
}.to change { s.request_status }
expect(response.status).to eq(200)
expect(s.request_status).to eq('new status')
end
end
قضيت معظم اليوم السابق في هذا الأمر، وسأقدر أي تلميحات حول الحلول أو تقنيات التصحيح.