Думаю, я бы выбрал подход с внедрением зависимостей. Вместо того:
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.
person
Grant Wagner
schedule
20.08.2009