Testování jednotek pomocí JavaScriptu na straně klienta je něco, co neděláte, dokud k tomu nebudete připraveni. Testování jednotek je samozřejmě důležité, ale buďme upřímní: Většina lidí je prostě ráda, že jejich kód funguje, že? V každém případě rychle vpřed do světa, kde je testování jednotek normální a my musíme vyřešit problém: přepisování nativních hodnot vlastností prohlížeče kvůli testování jednotek. Následuje jednoduchá strategie pro přepsání výchozích hodnot vlastností prohlížeče!
JavaScript
Nelze úspěšně přepsat všechny vlastnosti jednoduchým příkazem; použijme navigator.userAgent
například:
console.log(navigator.userAgent); // >> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 // Try to set that value -- will be unsuccessful navigator.userAgent = 'Walshbot'; console.log(navigator.userAgent); // >> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Přepsání navigator.userAgent
mohou být užitečné pro účely testování jednotek a funkcí, jak tedy můžeme tuto hodnotu úspěšně změnit? S Object.defineProperty
:
// Store the original value var originalUserAgent = navigator.userAgent; // Override! Object.defineProperty(navigator, 'userAgent', { get: function() { return 'WalshBot'; } }); // (Run your tests here) // Set the value back to original Object.defineProperty(navigator, 'userAgent', { get: function() { return originalUserAgent; } });
Ve výše uvedeném úryvku uložíme původní Object.defineProperty
hodnotu, krátce ji přepište a poté nastavte hodnotu zpět na původní. Object.defineProperty
je velmi užitečná, zvláště když uvážíte, že druhý argument je funkce – můžete v rámci této funkce spustit libovolnou logiku a vrátit správnou hodnotu v okamžiku, kdy je požadována!