<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arcadio Quintero</title>
    <description>The latest articles on DEV Community by Arcadio Quintero (@oidacra).</description>
    <link>https://dev.to/oidacra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F174267%2F714f0b50-1af7-4f55-b1ba-cd95b6492897.jpg</url>
      <title>DEV Community: Arcadio Quintero</title>
      <link>https://dev.to/oidacra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oidacra"/>
    <language>en</language>
    <item>
      <title>Mock PrimeNg ChartModule con Spectator</title>
      <dc:creator>Arcadio Quintero</dc:creator>
      <pubDate>Fri, 21 Jul 2023 15:08:06 +0000</pubDate>
      <link>https://dev.to/oidacra/reemplazar-chartmodule-en-test-con-spectator-2nc6</link>
      <guid>https://dev.to/oidacra/reemplazar-chartmodule-en-test-con-spectator-2nc6</guid>
      <description>&lt;p&gt;Recientemente, migramos algunas librerías a Jest y nos encontramos con problemas en los tests que habíamos creado para un componente que utilizaba el módulo de gráficos de PrimeNg (que a su vez es un wrapper de ChartJS).&lt;/p&gt;

&lt;p&gt;A primera vista, identificamos que el problema radicaba en la falta de soporte de Jest para Canvas, MutationObserver y otras APIs del navegador necesarias para ejecutar los tests (Usábamos Karma).&lt;/p&gt;

&lt;p&gt;Finalmente, nos dimos cuenta de que teníamos dos opciones: hacer mock de estas APIs del navegador o hacer mock del módulo de ChartModule. Como estábamos utilizando Spectator para realizar los tests, logramos hacerlo fácilmente (después de mucha búsqueda, prueba y error).&lt;/p&gt;

&lt;p&gt;En primer lugar, creamos un mock para reemplazar lo que necesitábamos. En este caso, dado que PrimeNG sigue utilizando módulos, creamos un componente y un módulo de prueba específicamente para este propósito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Componente que contiene chart.js en ChartModule de PrimeNG
@Component({
    selector: 'p-chart',
    template: 'PrimeNg Chart - mocked component'
})
class MockUIChart {
    // Aquí agregamos todos los imputs que estemos utilizando
    @Input()
    data: unknown;
    @Input()
    options: unknown;
    @Input()
    plugins: unknown;
}
// Módulo que importa y exporta el componente
@NgModule({
    declarations: [MockUIChart],
    exports: [MockUIChart]
})
export class MockChartModule {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y en nuestro test hacemos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('ComponentStandalone', () =&amp;gt; {
    let spectator: Spectator&amp;lt;ComponentStandalone&amp;gt;;

    const createComponent = createComponentFactory({
        component: ComponentStandalone,
        overrideComponents: [
            [
                ComponentStandalone,
                {
                    remove: { imports: [ChartModule] },
                    add: { imports: [MockChartModule] }
                }
            ]
        ]
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto evitamos que el componente de p-chart en el OnInit trate de instanciar ChartJS que era la raíz de todos los warnings en Jest.&lt;/p&gt;

&lt;p&gt;¿Tienes alguna experiencia con Jest, PrimeNg o herramientas de testing que te gustaría compartir? ¡Déjame tus comentarios!&lt;/p&gt;

</description>
      <category>angular</category>
      <category>spectator</category>
      <category>jest</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
