Вот простой пример (без проверки ошибок) использования ReflectionClass
:
function accessProtected($obj, $prop) {
$reflection = new ReflectionClass($obj);
$property = $reflection->getProperty($prop);
$property->setAccessible(true);
return $property->getValue($obj);
}
Я знаю, что вы сказали, что ограничены 5.2, но это было 2 года назад 5.5 является самой старой поддерживаемой версией , и я надеюсь помочь людям с современными версиями.
Когда вы запускаете свое приложение в процессе разработки, процесс сборки осуществляется с помощью веб-пакета / пакета / любого другого инструмента, который вы используете.
Эти инструменты позволяют вам (с помощью плагинов) делать что-то вроде импорта css в javascript, а затем, в конце концов, выплевывать его обратно как css. Это не нативная особенность JavaScript.
Jest работает на узле js, который не обладает всеми функциями веб-пакета и не может анализировать raw css и т. Д.
Итак, когда у вас была ошибка "SyntaxError: /Users/thiagofacchini/Documents/atomix/src/library/atoms/Label/styles.css: Support for the experimental syntax 'decorators-legacy' isn't currently enabled (2:1):"
, это на самом деле nodejs, пытающийся проанализировать CSS как javascript! Вы можете прочитать больше о том, что это было, хотя вы делали здесь https://www.sitepoint.com/javascript-decorators-what-they-are/
Так как вы управляете CSS в вашей среде jest?
в конфигурации jest вы настроили ее так, чтобы не импортировать css, а вместо этого импортировать пустой модуль.
сначала установите npm install-obj-proxy
, а затем добавьте следующее в свой jest.config.js
moduleNameMapper: {
"\\.css$": "identity-obj-proxy",
"^lodash-es$": "lodash"
},