aboutsummaryrefslogtreecommitdiff
path: root/files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
commit074785cea106179cb3305637055ab0a009ca74f2 (patch)
treee6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/pt-br/mozilla/add-ons/sdk/tutorials/unit_testing
parentda78a9e329e272dedb2400b79a3bdeebff387d47 (diff)
downloadtranslated-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.html127
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 =&gt; atob(a);
+exports.btoa = b =&gt; 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>