Teste de unidade

Para seguir este tutorial você precisará ter conhecimento básico de jpm e ter seguido o tutorial de criação de módulos reutilizáveis.

Se você está migrando código de teste do cfx para o jpm, veja o guia de migração do cfx, em particular a seção loading modules from test code.

O SDK fornece um framework para ajudar a criar e executar testes de unidade para seu código. Para demonstrar como ele funciona nós escreveremos um teste de unidade para um módulo simples de codificação Base64.

Um módulo simples Base64

Em uma página web, você pode executar uma codificação Base64 e decodificação usando as funções btoa() e atob(). Infelizmente essas funções pertencem ao objeto window: uma vez que o objeto não está disponível no código principal do add-on, atob() e btoa() não estão disponíveis de qualquer forma. Então nós criaremos um módulo base64 para exibir estas funções da plataforma.

Para começar, crie um novo diretório, navegue para ele, e execute o jpm init. Agora crie um novo arquivo chamado "base64.js", e de lhe o seguinte conteúdo:

const { atob, btoa } = require("chrome").Cu.import("resource://gre/modules/Services.jsm", {});
 
exports.atob = a => atob(a);
exports.btoa = b => btoa(b);

Este código exporta duas funções, que chamamos btoa() and atob(). Para mostrar o módulo em uso, edit o arquivo "index.js" como segue:

var base64 = require("./base64");

var button = require("sdk/ui/button/action").ActionButton({
  id: "base64",
  label: "base64",
  icon: "./icon-16.png",
  onClick: function() {
    encoded = base64.btoa("hello");
    console.log(encoded);
    decoded = base64.atob(encoded);
    console.log(decoded);
  }
});

Para executar esse exemplo você também terá que ter um ícone chamado "icon-16.png" salvo no diretório data do add-on. Você pode baixar este ícone: .

Agora o "index.js" importa o módulo base64 e chama suas duas funções exportadas. Se nós executarmos o add-on e clicarmos no botão, nós devemos ver a seguinte saída:

info: aGVsbG8=
info: hello

Testando o módulo Base64

Navegue para o diretório test e delete o arquivo test-index.js. Em seu lugar crie um arquivo chamado test-base64.js com o seguinte conteúdo:

var base64 = require("../base64");
 
exports["test atob"] = function(assert) {
      assert.ok(base64.atob("aGVsbG8=") == "hello", "atob works");
}
 
exports["test btoa"] = function(assert) {
  assert.ok(base64.btoa("hello") == "aGVsbG8=", "btoa works");
}
 
exports["test empty string"] = function(assert) {
  assert.throws(function() {
                  base64.atob();
                },
                "empty string check works");
}
 
require("sdk/test").run(exports);

Note que com o  jpm nós devemos dar o caminho exato do módulo base64.js.

Esse arquivo: exporta três funções, cada qual espera receber um único argumento que é o objeto assert. assert é fornecida pelo módulo test/assert e implementa o CommonJS Unit Testing specification.

  • As duas primeiras funções chamam atob() e btoa() e usa o assert.ok() para checar que a saída é a esperada

  • A segunda função testo código de manipulação de erro do módulo passando uma string vazia para o atob() e usando assert.throws() para checar que a exceção esperada foi lançada.

Neste ponto seu add-on deve parecer com isto:

  /base64
      /data
          icon-16.png
      package.json
      README.md
      index.js
      base64.js
      /test
          test-base64.js

Agora execute o jpm --verbose test da pasta principal do add-on. Você deve ver algo como isto:

console.info: jpm-utest: executing './test/test-base64.test atob'
console.info: jpm-utest: pass: atob works
console.info: jpm-utest: executing './test/test-base64.test btoa'
console.info: jpm-utest: pass: btoa works
console.info: jpm-utest: executing './test/test-base64.test empty string'
console.info: jpm-utest: pass: empty string check works

3 of 3 tests passed.
All tests passed!

O que aconteceu aqui é que o jpm test:

  • procura no diretório test o seu pacote
  • carrega qualquer módulo cujo nome começa com a palavra test- (Note o hífen depois de "test" no nome do módulo. jpm test incluirá um módulo chamado "test-myCode.js", mas excluirá módulos chamados "test_myCode.js" ou "testMyCode.js".)
  • chama cada função exportada cujo nome começa com "test", passando um objeto assert como seu único argumento.

Obviamente, você não tem que passar a opção --verbose para o jpm se você não quiser; fazendo assim torna a saída mais fácil de ler.

Etiquetas do documento e colaboradores

Etiquetas: 
 Colaboradores desta página: Pheanor
 Última atualização por: Pheanor,