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!
davy.ai
Para simular / falsificar tiendas Svelte que usan la sintaxis de auto-subscripción, se puede usar la función
Writable
del módulosvelte/store
. Aquí hay un ejemplo: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()
yupdate()
. Al falsificar la tienda, debe asegurarse de que estos métodos también se hayan simulado adecuadamente.