O teste de unidade com JavaScript do lado do cliente é algo que você não faz até ser obrigado a fazer. É claro que o teste de unidade é importante, mas sejamos honestos: a maioria das pessoas fica feliz com o fato de seu código funcionar, certo? De qualquer forma, avançamos rapidamente para um mundo em que os testes unitários são normais e temos um problema a resolver: substituir valores de propriedade nativos do navegador para fins de testes unitários. A seguir, uma estratégia fácil para substituir os valores de propriedade padrão do navegador!
O JavaScript
Não é possível substituir com sucesso todas as propriedades com uma simples declaração; vamos usar navigator.userAgent
por exemplo:
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
Substituindo o navigator.userAgent
pode ser útil para fins de testes unitários e funcionais, portanto, como podemos alterar esse valor com êxito? Com 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; } });
No snippet acima, salvamos o original Object.defineProperty
original, substituímo-lo brevemente e, em seguida, definimos o valor de volta para o original. Object.defineProperty
é muito útil, especialmente quando se considera que o segundo argumento é uma função – o senhor pode executar qualquer lógica dentro dessa função para retornar o valor adequado no momento em que for solicitado!
Eu sou um Impostor
Essa é a coisa mais difícil que já tive de escrever, muito menos admitir para mim mesmo. Já escrevi cartas de demissão de empregos que amava, terminei relacionamentos, fracassei em uma série de tarefas e me decepcionei em minha vida. Todos esses sentimentos foram muito…
Animações CSS entre consultas de mídia
As animações CSS estão no mesmo patamar do pão fatiado. As animações CSS são eficientes porque podem ser aceleradas por hardware, não exigem sobrecarga de JavaScript e são compostas por pouquíssimo código CSS. Muitas vezes, adicionamos transformações CSS a elementos por meio de CSS durante…
Plug-in MooTools PulseFade
Recentemente, fui motivado a criar um plug-in MooTools que pegasse um elemento e o desvanecesse de um mínimo para um máximo em um determinado número de vezes. Aqui está o resultado do meu Moo-foolery. O MooTools JavaScript As opções da classe incluem: min: (o padrão é .5) o…
Mais 5 APIs HTML5 que o senhor não sabia que existiam
O Revolução do HTML5 nos proporcionou algumas APIs JavaScript e HTML incríveis. Algumas são APIs que já sabíamos que precisávamos há anos, outras são ajudantes de ponta para dispositivos móveis e desktops. Independentemente da força ou da finalidade da API, qualquer coisa que nos ajude a fazer melhor nosso trabalho é uma…