Skip to content

Tests with error "Cannot read properties of null (reading '__t')" #15896

Closed
@mmamedel

Description

@mmamedel

Describe the bug

Thank you for your amazing work with Svelte 5. We have migrated our repo, and we are now migrating our components. We are facing a challenge though with a specific scenario of our test files:

Reproduction

For instance, this Component works fine. But if I create a simple test for it (not even expecting anything), like:

import { mount, unmount } from 'svelte';
import Comp1 from './Component.svelte';

describe('ShortcutKeys', () => {
  it('Makes letters uppercase', () => {
    const component = mount(Comp1, { target: document.body, props: { obj: { derived: ['a', 'b'] } }});
    unmount(component);
  });
});

We get this error:

 FAIL  src/lib/shared/components/shortcutsWindow/ShortcutKeys.svelte.test.ts > ShortcutKeys > Makes letters uppercase
TypeError: Cannot read properties of null (reading '__t')

        in {expression}
        in Comp1.svelte

 ❯ src/lib/shared/components/shortcutsWindow/Comp1.svelte:46:69
     11|     <div>{key}</div>
     12|   {/each}
     13| </div>
       |       ^
     14| 
 ❯ src/lib/shared/components/shortcutsWindow/Comp1.svelte:46:25

Compiled code looks like this:

/* Compiled: /home/mlage/repos/tma-studio/apps/frontendV2/src/lib/shared/components/shortcutsWindow/Comp1.svelte */
import 'svelte/internal/disclose-version';
import * as $ from 'svelte/internal/client';

var root_2 = $.template(`<span>+</span>`);
var root_1 = $.template(`<!> <div> </div>`, 1);
var root = $.template(`<div></div>`);

export default function _unknown_($$anchor, $$props) {
	$.push($$props, true);

	const objDerived = $.derived(() => $$props.obj.derived);
	var div = root();

	$.each(div, 22, () => $.get(objDerived), (key) => key, ($$anchor, key, i) => {
		var fragment = root_1();
		var node = $.first_child(fragment);

		{
			var consequent = ($$anchor) => {
				var span = root_2();

				$.append($$anchor, span);
			};

			$.if(node, ($$render) => {
				if ($.get(i) > 0) $$render(consequent);
			});
		}

		var div_1 = $.sibling(node, 2);
		var text = $.child(div_1, true);

		$.reset(div_1);
		$.template_effect(() => $.set_text(text, key));
		$.append($$anchor, fragment);
	});

	$.reset(div);
	$.append($$anchor, div);
	$.pop();
}

And the problem seems to come from $.set_text(text, key) where text is null.
Interesting if we change the order of the if in the svelte component it works. So, Component.svelte like this:

<script>
  let { obj } = $props();
  const objDerived = $derived(obj.derived);
</script>

<div>
  {#each objDerived as key, i (key)}
    <div>{key}</div>
    <!-- Reversed order of each children -->
    {#if i > 0}
      <span>+</span>
    {/if}
  {/each}
</div>

Any suggestions?

Logs

System Info

System:
    OS: Linux 5.15 Ubuntu 22.04.1 LTS 22.04.1 LTS (Jammy Jellyfish)
    CPU: (12) x64 Intel(R) Core(TM) i5-10500 CPU @ 3.10GHz
    Memory: 8.31 GB / 15.51 GB
    Container: Yes
    Shell: 5.1.16 - /bin/bash
  Binaries:
    Node: 22.14.0 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 10.5.0 - ~/.local/share/pnpm/npm
    pnpm: 9.13.0 - ~/.local/share/pnpm/pnpm
  npmPackages:
    svelte: ^5.28.2 => 5.28.2

Severity

blocking an upgrade

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaiting submitterneeds a reproduction, or clarification

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions