es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Svelte Stores y Jest

Estoy buscando una forma de simular/imitar tiendas que se utilizan en componentes Svelte, específicamente con la sintaxis de auto-suscripción (es decir, $myStore o $myStore.property).

He intentado algunas simulaciones diferentes, principalmente algo como lo siguiente:


jest.mock('./stores/users', () => ({
currentUser: jest.fn().mockImplementation(() =>
writable({
isAdmin: true,
}),
),
}));

La prueba dará error en cualquier referencia auto-suscripta a la tienda, que son undefined. Por ejemplo, si estoy haciendo referencia a una tienda de "../../stores/users" en mi componente de la siguiente manera…

{#if $user.isAdmin}
  <div>Hola soy un admin</div>
{/if}

… entonces recibo TypeError: Cannot read property 'isAdmin' of undefined

Parece ser que incluso al simular una tienda Svelte, la sintaxis de auto-suscripción $ no está respetando la prueba. Debería señalar que cuando registro la tienda simulada, los métodos de la tienda Svelte esperados (subscribe(), set() y update()) están allí, y ejecutando el método subscribe() también expone el atributo isAdmin como se esperaba.

No puedo encontrar ningún patrón establecido de pruebas unitarias que trate con Svelte y el uso de tiendas, así que cualquier aporte sobre el tema sería muy apreciado!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para simular / falsificar tiendas Svelte que usan la sintaxis de auto-subscripción, se puede usar la función Writable del módulo svelte/store. Aquí hay un ejemplo:

    import { writable } from 'svelte/store';
    jest.mock('./stores/users', () => ({
      currentUser: jest.fn().mockImplementation(() =>
        writable({
          isAdmin: true,
        }),
      ),
    }));
    

    Esto debería permitirle simular la tienda y sus propiedades sin obtener errores indefinidos al usar la sintaxis de auto-subscripción en sus componentes Svelte.

    Es importante tener en cuenta que las tiendas Svelte tienen tres métodos: subscribe(), set() y update(). Al falsificar la tienda, debe asegurarse de que estos métodos también se hayan simulado adecuadamente.

Comments are closed.