هل ترغب في طلب _ ميزة _ أو الإبلاغ عن _ خطأ _؟
الإبلاغ عن خطأ.
ما هو السلوك الحالي؟
إذا كان لمشروع ما تبعية على وحدة تحمل نفس اسم ملف داخلي مع نموذج ، فسيتم استرداد هذا التنفيذ الوهمي لطلبات الوحدة العالمية ، بدلاً من الوحدة العامة ، مما يتطلب إلغاء السخرية الصريح (والذي يقوم بعد ذلك بطباعة تحذير ، على الرغم من إظهار تغيير ملموس في السلوك).
إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج وإذا أمكن الحد الأدنى من المستودع على GitHub بحيث يمكننا npm install
و npm test
.
npm install
التبعياتnpm test
فشل الاختبار الذي يتوقع أن تكون قادرًا على استيراد الوحدة العامة ( with no explicit opt-out › globalPad should not be a mock function
) لأن الوحدة التي تم إرجاعها هي في الواقع محاكاة يدوية.
(لاحظ أنه يتم استخدام left-pad
هنا لأنه وحدة صغيرة بدون متطلبات تجميع.)
ما هو السلوك المتوقع؟
يجب أن يُرجع بيان الاستيراد الوحدة النمطية العامة ، كما هو الحال في explicit-opt-out.js
قم بتشغيل Jest مرة أخرى بـ --debug
وقدم التكوين الكامل الذي تطبعه.
jest version = 16.0.1
test framework = jasmine2
config = {
"rootDir": "/Users/jessica/Repositories/jest-mock-bug",
"name": "-Users-jessica-Repositories-jest-mock-bug",
"setupFiles": [],
"testRunner": "/Users/jessica/Repositories/jest-mock-bug/node_modules/jest-jasmine2/build/index.js",
"scriptPreprocessor": "/Users/jessica/Repositories/jest-mock-bug/node_modules/babel-jest/build/index.js",
"usesBabelJest": true,
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/rl/98bml8qx57n3b6xgsgyvbxtr0000gn/T/jest",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"js",
"json",
"jsx",
"node"
],
"moduleNameMapper": {},
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"preprocessorIgnorePatterns": [
"/node_modules/"
],
"resetModules": false,
"testEnvironment": "jest-environment-jsdom",
"testPathDirs": [
"/Users/jessica/Repositories/jest-mock-bug"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"useStderr": false,
"verbose": null,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
أعتقد أن هذه الحالة مشابهة لما حدث في مشروعي
في حالتي لدي <rootDir>/__mocks__/left-pad.js
. ستعمل جميع الاختبارات التي تستورد left-pad
تلقائيًا على استيراد left-pad
المثير للسخرية على الرغم من أنني لم أتصل صراحةً بـ jest.mock('left-pad')
الحل الحالي الخاص بي هو محاكاة صريحة ومن ثم إلغاء السخرية منهم بشكل صريح. إنه قبيح ، لكنه يعمل
jest.mock('left-pad');
jest.unmock('left-pad');
اها شكرا! هذا حل أنظف من حلّي ، رغم أنه بالتأكيد ليس مثاليًا!
نعم ، النماذج اليدوية لها الأسبقية على وحدات العقد. نظام mocks اليدوي سطحي بعض الشيء. في الوقت الحالي ، نقوم بإزالة التحذير في الإصدار التالي ، لذلك يجب أن يكون jest.unmock('left-pad')
هو كل ما تحتاجه. انظر # 2022
كانت إحدى الأفكار التي كانت لدينا هي إنشاء نظام منفصل لوحدات العقدة اليدوية ولكن من المحتمل أن تتم مناقشتها في اقتراح منفصل ، لذلك سأغلق هذه المشكلة.
التعليق الأكثر فائدة
نعم ، النماذج اليدوية لها الأسبقية على وحدات العقد. نظام mocks اليدوي سطحي بعض الشيء. في الوقت الحالي ، نقوم بإزالة التحذير في الإصدار التالي ، لذلك يجب أن يكون
jest.unmock('left-pad')
هو كل ما تحتاجه. انظر # 2022كانت إحدى الأفكار التي كانت لدينا هي إنشاء نظام منفصل لوحدات العقدة اليدوية ولكن من المحتمل أن تتم مناقشتها في اقتراح منفصل ، لذلك سأغلق هذه المشكلة.