diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing')
-rw-r--r-- | files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html b/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html new file mode 100644 index 0000000000..2e65659ed5 --- /dev/null +++ b/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing/index.html @@ -0,0 +1,127 @@ +--- +title: Teste de unidade +slug: Mozilla/Add-ons/SDK/Tutorials/Unit_testing +tags: + - Add-on SDK + - JPM +translation_of: Archive/Add-ons/Add-on_SDK/Tutorials/Unit_testing +--- +<div class="note"> +<p><span>Para seguir este tutorial você precisará ter conhecimento básico de<a href="/en-US/docs/Mozilla/Add-ons/SDK/Tutorials/Getting_Started_%28jpm%29"> <code>jpm</code></a> e ter seguido o tutorial de <a href="/en-US/Add-ons/SDK/Tutorials/Using_third-party_modules_(jpm)">criação de módulos reutilizáveis</a>.</span></p> +</div> + +<div class="note"> +<p>Se você está migrando código de teste do cfx para o <a href="/en-US/Add-ons/SDK/Tools/jpm">jpm</a>, veja o guia de migração do cfx, em particular a seção <a href="/en-US/Add-ons/SDK/Tools/cfx_to_jpm#Requiring_modules_from_test_code">loading modules from test code</a>.</p> +</div> + +<p>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 <a href="http://en.wikipedia.org/wiki/Base64">Base64</a>.</p> + +<h2 id="Um_módulo_simples_Base64">Um módulo simples Base64</h2> + +<p>Em uma página web, você pode executar uma codificação Base64 e decodificação usando as funções <code>btoa()</code> e <code>atob()</code>. Infelizmente essas funções pertencem ao objeto <code>window</code>: uma vez que o objeto não está disponível no código principal do add-on, <code>atob()</code> e <code>btoa()</code> não estão disponíveis de qualquer forma. Então nós criaremos um módulo <code>base64</code> para exibir estas funções da plataforma.</p> + +<p>Para começar, crie um novo diretório, navegue para ele, e execute o <code>jpm init</code>. Agora crie um novo arquivo chamado "base64.js", e de lhe o seguinte conteúdo:</p> + +<pre class="brush: js">const { atob, btoa } = require("chrome").Cu.import("resource://gre/modules/Services.jsm", {}); + +exports.atob = a => atob(a); +exports.btoa = b => btoa(b); +</pre> + +<p>Este código exporta duas funções, que chamamos <code>btoa()</code> and <code>atob()</code>. Para mostrar o módulo em uso, edit o arquivo "index.js" como segue:</p> + +<pre class="brush: js">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); + } +});</pre> + +<p>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: <img alt="" src="https://mdn.mozillademos.org/files/7661/icon-16.png" style="height: 16px; width: 16px;">.</p> + +<p>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:</p> + +<pre>info: aGVsbG8= +info: hello +</pre> + +<h2 id="Testando_o_módulo_Base64">Testando o módulo Base64</h2> + +<p>Navegue para o diretório <code>test</code> e delete o arquivo <code>test-index.js</code>. Em seu lugar crie um arquivo chamado <code>test-base64.js</code> com o seguinte conteúdo:</p> + +<pre class="brush: js">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); +</pre> + +<div class="note"> +<p>Note que com o jpm nós devemos dar o caminho exato do módulo base64.js.</p> +</div> + +<p>Esse arquivo: exporta três funções, cada qual espera receber um único argumento que é o objeto <code>assert</code>. <code>assert</code> é fornecida pelo módulo <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert"><code>test/assert</code></a> e implementa o <a href="http://wiki.commonjs.org/wiki/Unit_Testing/1.1">CommonJS Unit Testing specification</a>.</p> + +<ul> + <li> + <p>As duas primeiras funções chamam <code>atob()</code> e <code>btoa()</code> e usa o <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#ok(guard.2C_message)"><code>assert.ok()</code></a> para checar que a saída é a esperada</p> + </li> + <li> + <p>A segunda função testo código de manipulação de erro do módulo passando uma string vazia para o <code>atob()</code> e usando <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#throws(block.2C_error.2C_message)"><code>assert.throws()</code></a> para checar que a exceção esperada foi lançada.</p> + </li> +</ul> + +<p>Neste ponto seu add-on deve parecer com isto:</p> + +<pre> /base64 + /data + icon-16.png + package.json + README.md + index.js + base64.js + /test + test-base64.js +</pre> + +<p>Agora execute o <code>jpm --verbose test</code> da pasta principal do add-on. Você deve ver algo como isto:</p> + +<pre>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!</pre> + +<p>O que aconteceu aqui é que o <code>jpm test</code>:</p> + +<ul> + <li>procura no diretório <code>test</code> o seu pacote</li> + <li>carrega qualquer módulo cujo nome começa com a palavra <code>test- </code>(Note o hífen depois de<span> "test" no nome do módulo. <code>jpm test</code> incluirá um módulo chamado "test-myCode.js", mas excluirá módulos chamados "test_myCode.js" ou "testMyCode.js".)</span></li> + <li>chama cada função exportada cujo nome começa com "test", passando um objeto <a href="/en-US/Add-ons/SDK/Low-Level_APIs/test_assert#Assert"><code>assert</code></a> como seu único argumento.</li> +</ul> + +<p>Obviamente, você não tem que passar a opção<code> --verbose</code> para o jpm se você não quiser; fazendo assim torna a saída mais fácil de ler.</p> |