Полагаю, я бы применил подход внедрения зависимостей. Вместо:
function myFunction() {
var userAgent = navigator.userAgent;
// do stuff with userAgent
}
Может быть сделать что-то вроде:
function myFunction(userAgent) {
// do stuff with userAgent
}
function getUserAgent() {
window.userAgentReal = +window.userAgentReal || 0;
return [ navigator.userAgent ][window.userAgentReal++];
}
function getUserAgentMock() {
window.nextUserAgentMock = +window.nextUserAgentMock || 0;
return [
'test user agent1',
'test user agent2',
'test user agent3'
][window.nextUserAgentMock++];
}
var userAgent;
while (userAgent = getUserAgent()) {
myFunction(userAgent);
}
Тогда вы можете "макетировать" getUserAgent()
, выполнив:
function getUserAgentReal() { // formerly not 'Real'
// ...
}
function getUserAgent() { // formerly 'Mock'
// ...
}
Этот дизайн до сих пор не полностью автоматизирован (вам нужно вручную переименовать геттер для выполнения вашего тестирования), и он добавляет кучу сложности к чему-то так простому, как работа на navigator.userAgent
, и я не уверен, как вы бы на самом деле определили какие-либо ошибки в myFunction
, но я просто решил, что выложу их, чтобы дать вам несколько идей, как с этим справиться.
Возможно, представленная здесь идея «внедрения зависимостей» может быть каким-то образом интегрирована с FireUnit.