أنا أعمل حاليًا على طلب السحب هذا: FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub
أحاول تغطية التغيير باختبار واجهة أمامية جديد.
لكن الاختبار يفشل في التشغيل بسبب عدم تعريف سمة بيانات مطلوبة.
القضية التي أواجهها هي كيفية تجاوز البيانات بنجاح في الموقع (Site) باستخدام تثبيت (fixture) موجود هنا:
main ← production_fixes
opened 03:54PM - 14 Dec 22 UTC
* FIX: all places where geolocation is formatted (+ add covering & first FE test… )
* FIX: failure to build
* IMPROVE: add CI workflow
* FIX: specs (out of date with latest Rails)
والذي يحتوي على سمة إضافية يحتفظ بها الموقع (Site) عند وجود مكون المكونات الإضافية للمواقع (Locations Plugin).
… وجعلها مستمرة لبقية الاختبار!
الاختبار الجديد هنا.
main ← production_fixes
opened 03:54PM - 14 Dec 22 UTC
* FIX: all places where geolocation is formatted (+ add covering & first FE test… )
* FIX: failure to build
* IMPROVE: add CI workflow
* FIX: specs (out of date with latest Rails)
لقد قمت بتحميل الموقع (Site) بنجاح باستخدام التثبيت (fixture)، على ما يبدو.
أتوقف عند نقطة المصحح هذه أثناء تشغيل qunit في المتصفح ويمكنني القول إنه تم تحميله بشكل صحيح:
test("user card location - shows correct format", async function (assert) {
const siteAttrs = {
...siteFixtures["site.json"].site,
};
PreloadStore.store("site", cloneJSON(siteAttrs));
Site.resetCurrent();
debugger;
PreloadStore.get("site")
ولكن عندما يتم النقر على بطاقة المستخدم (User Card)، فإن البيانات ليست كما تتوقع وبشكل حاسم، فإن سمة country_codes مفقودة، لذا يتوقف الاختبار، هنا:
if (user && user.geo_location) {
contents.push(iconNode('map-marker-alt'));
let format = this.siteSettings.location_user_profile_format.split('|');
let opts = {};
let userLocation;
if (format.length && format[0]) {
opts['geoAttrs'] = format;
userLocation = geoLocationFormat(user.geo_location, self.site.country_codes, opts);
} else {
userLocation = user.geo_location.address;
};
contents.push(h('div.location-label', userLocation));
if (this.siteSettings.location_user_profile_map) {
let mapContents = [];
let btnParams = {
لماذا يتم فقدان بيانات الموقع (Site) التي تجاوزتها؟
إعجاب واحد (1)
حسنًا، هذا محبط.
يبدو أن قيمة كائن الموقع تم تعيينها هنا:
const clock = fakeTime(timeString, timezone, false);
try {
callback();
} finally {
clock.restore();
}
}
let _pretenderCallbacks = {};
export function resetSite(extras = {}) {
const siteAttrs = {
...siteFixtures["site.json"].site,
...extras,
};
PreloadStore.store("site", cloneJSON(siteAttrs));
Site.resetCurrent();
}
export function applyPretender(name, server, helper) {
ولا يمكن تجاوزه؟
لقد تحققت من ذلك عن طريق تعديل التثبيت في النواة (هنا: discourse/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js at 93a4012ecb3af7306de0c51283d6dd2b2e90818c · discourse/discourse · GitHub ) وهو يلتقط تعديلي.
لكنني لا أريد ذلك، بل أريد تجاوزه في اختبار المكون الإضافي الخاص بي باستخدام تثبيت مخزن في المكون الإضافي الخاص بي.
للتكرار، أنا قادر على القيام بذلك لنطاق كود الاختبار ولكن بمجرد تشغيل كود المكون الإضافي، يبدو أن النطاق يلتقط كائن الموقع الذي يتعلق بالتثبيت الذي تم تحميله بواسطة مساعد اختبار النواة …
لقد قمت أخيرًا بحل هذه المشكلة. اتضح أنه يمكنك استخدام needs تمامًا كما هو الحال مع الكائنات الأخرى:
الدليل هنا:
};
const needs = {
user(changes) {
loggedIn = true;
userChanges = changes;
},
pretender(fn) {
addPretenderCallback(name, fn);
},
site(changes) {
siteChanges = changes;
},
settings(changes) {
settingChanges = changes;
},
mobileView() {
mobileView = true;
},
};
الكود النهائي:
needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 إعجابات
system
(system)
تم إغلاقه في
27 يناير 2023، 9:58م
4
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.