Existe uma boa maneira de fazer isso? Estou escrevendo uma extensão que interage com um site como um script de conteúdo e salva dados usando o armazenamento local. Existem ferramentas, estruturas etc. que posso usar para testar esse comportamento? Sei que existem algumas ferramentas genéricas para testar javascript, mas essas são poder suficiente para testar uma extensão? O teste de unidade é o mais importante, mas também estou interessado em outros tipos de teste (como teste de integração).
unit-testing
google-chrome
google-chrome-extension
swampsjohn
fonte
fonte
Respostas:
Sim, as estruturas existentes são bastante úteis.
No passado recente, coloquei todos os meus testes em uma página de "teste" incorporada ao aplicativo, mas não acessível, a menos que digitado fisicamente.
Por exemplo, eu teria todos os testes em uma página acessível em
chrome-extension://asdasdasdasdad/unittests.html
Os testes teriam acesso a
localStorage
etc. Para acessar scripts de conteúdo, em teoria, você poderia testar isso através de IFRAMEs incorporados em sua página de teste; no entanto, esses são mais testes de nível de integração, os testes de unidade exigiriam que você abstraísse isso das páginas reais para que você não dependa deles, da mesma forma com acesso ao localStorage.Se você quiser testar as páginas diretamente, poderá orquestrar sua extensão para abrir novas guias (chrome.tab.create ({"url": "someurl"})). Para cada uma das novas guias, seu script de conteúdo deve ser executado e você pode usar sua estrutura de teste para verificar se seu código fez o que deve fazer.
Quanto às estruturas, o JsUnit ou o Jasmine mais recente devem funcionar bem.
fonte
Trabalhando em várias extensões do Chrome, criei um
sinon-chrome
projeto que permite executar testes de unidade usandomocha
,nodejs
ephantomjs
.Basicamente, ele cria zombarias sinon de toda
chrome.*
API, nas quais você pode colocar qualquer resposta json predefinida.Em seguida, você carrega seus scripts usando os nós da
vm.runInNewContext
página de segundo plano ephantomjs
para renderizar a janela pop-up / opções.E, finalmente, você afirma que a API do Chrome foi chamada com os argumentos necessários.
Vamos dar um exemplo:
suponha que tenhamos uma extensão simples do chrome que exibe o número de guias abertas no emblema do botão.
página de fundo:
Para testá-lo, precisamos:
chrome.tabs.query
para retornar uma resposta predefinida, por exemplo, duas guias.chrome.*
API ridicularizada em algum ambienteO trecho de código é o seguinte:
Agora podemos envolvê-lo nas
describe..it
funções do mocha e executar no terminal:Você pode encontrar um exemplo completo aqui .
Além disso, o sinon-chrome permite acionar qualquer evento chrome com resposta predefinida, por exemplo
fonte
Embora
sinon.js
pareça funcionar muito bem, você também pode usar o Jasmine simples e zombar dos retornos de chamada do Chrome que você precisa. Exemplo:Zombar
Teste
Basta modificar o padrão
SpecRunner.html
para executar seu código.fonte
Sobre a ferramenta já existente no Chrome:
Na ferramenta de desenvolvedor do chrome, há uma seção para Recursos para armazenamento local.
Ferramentas do desenvolvedor> Recursos> Armazenamento local
Veja as alterações do armazenamento local lá.
Você pode usar o console.profile para testar o desempenho e observar a pilha de chamadas em tempo de execução.
Se você usar o script de conteúdo e o armazenamento local juntos, sem a página / script em segundo plano e sem passar a mensagem, o armazenamento local estará acessível apenas nesse site. Portanto, para testar essas páginas, você deve injetar seu script de teste nessas guias.
fonte
Descobri que posso usar o driver da web Selenium para iniciar uma nova instância do navegador com extensão pré-instalada e o pyautogui para cliques - porque o Selenium não pode impulsionar a "visualização" da extensão. Após os cliques, você pode fazer capturas de tela e compará-las com as 'esperadas', esperando 95% de semelhança (porque em navegadores diferentes são aceitáveis movimentos de marcação para alguns pixels).
fonte
Para confirmar algumas respostas anteriores, o Jasmine parece funcionar bem com as extensões do Chrome. Estou usando a versão 3.4.0.
Você pode usar espiões Jasmine para criar com facilidade duplas de teste para as várias APIs. Não há necessidade de criar o seu próprio a partir do zero. Por exemplo:
Mais alguns detalhes, se ajudar:
Como mencionado em outra resposta, criei uma página HTML como parte da extensão do navegador que executa meus testes. A página HTML inclui a biblioteca Jasmine, além do código JavaScript da minha extensão, além do meu conjunto de testes. Os testes são executados automaticamente e os resultados são formatados para você. Não há necessidade de criar um executor de teste ou um formatador de resultados. Basta seguir as instruções de instalação e usar o HTML documentado lá para criar sua página do executor de testes e incluir seu conjunto de testes na página.
Eu não acho que você pode buscar a estrutura do Jasmine dinamicamente de outro host, então acabei de incluir o lançamento do Jasmine na minha extensão. Omitirei e também meus casos de teste quando construir minha extensão para produção, é claro.
Eu não olhei como executar meus testes na linha de comando. Isso seria útil para ferramentas de implantação automatizada.
fonte