0
0
Svelteframework~20 mins

Unit testing logic in Svelte - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Svelte Unit Testing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Svelte component test?
Given the following Svelte component and its test, what will the test output?
Svelte
/* Component: Counter.svelte */
<script>
  export let start = 0;
  let count = start;
  function increment() {
    count += 1;
  }
</script>
<button on:click={increment} aria-label="Increment">Count: {count}</button>

/* Test file: Counter.test.js */
import { render, fireEvent } from '@testing-library/svelte';
import Counter from './Counter.svelte';

test('increments count on click', async () => {
  const { getByRole } = render(Counter, { start: 5 });
  const button = getByRole('button', { name: /increment/i });
  expect(button.textContent).toBe('Count: 5');
  await fireEvent.click(button);
  expect(button.textContent).toBe('Count: 6');
});
ATest throws a runtime error due to missing event handler.
BTest fails because the button text does not update after click.
CTest fails because initial count is 0 instead of 5.
DTest passes successfully with count incrementing from 5 to 6.
Attempts:
2 left
💡 Hint
Remember that Svelte updates reactive variables and the DOM automatically after events.
state_output
intermediate
2:00remaining
What is the value of 'message' after this test runs?
Consider this Svelte component and its test. What will be the final value of the 'message' variable after the test completes?
Svelte
<script>
  import { writable } from 'svelte/store';
  export const message = writable('Hello');
  export function updateMessage(newMsg) {
    message.set(newMsg);
  }
</script>

// Test file
import { message, updateMessage } from './MessageStore.js';

test('updates message store', () => {
  let current;
  const unsubscribe = message.subscribe(value => current = value);
  expect(current).toBe('Hello');
  updateMessage('Hi there');
  expect(current).toBe('Hi there');
  unsubscribe();
});
A'Hello'
B'Hi there'
Cundefined
Dnull
Attempts:
2 left
💡 Hint
Svelte stores update subscribers immediately when set is called.
📝 Syntax
advanced
2:00remaining
Which option causes a syntax error in this Svelte test?
Identify which test code snippet will cause a syntax error when testing a Svelte component.
Svelte
import { render } from '@testing-library/svelte';
import MyComponent from './MyComponent.svelte';
A;)} ;)(tnemucoDehTnIeBot.))'olleH'(txeTyBteg(tcepxe ;)tnenopmoCyM(redner = } txeTyBteg { tsnoc { >= )( ,'yltcerroc sredner'(tset
Btest('renders correctly', () => { const { getByText } = render(MyComponent); expect(getByText('Hello')).toBeInTheDocument() });
Ctest('renders correctly', () => { const { getByText } = render(MyComponent); expect(getByText('Hello')).toBeInTheDocument(); });
Dest('renders correctly', () => { const { getByText } = render(MyComponent); expect(getByText('Hello')).toBeInTheDocument(); });
Attempts:
2 left
💡 Hint
Check the syntax of the test function declaration carefully.
🔧 Debug
advanced
2:00remaining
Why does this Svelte test fail to detect a button click?
This test tries to check if a button click updates text, but it fails. Why?
Svelte
<script>
  let clicked = false;
  function handleClick() {
    clicked = true;
  }
</script>
<button on:click={handleClick}>Click me</button>
<p>{clicked ? 'Clicked!' : 'Not clicked'}</p>

// Test file
import { render, fireEvent } from '@testing-library/svelte';
import ClickComponent from './ClickComponent.svelte';

test('button click updates text', async () => {
  const { getByText } = render(ClickComponent);
  const button = getByText('Click me');
  expect(getByText('Not clicked')).toBeInTheDocument();
  await fireEvent.click(button);
  expect(getByText('Clicked!')).toBeInTheDocument();
});
AThe 'clicked' variable is not reactive, so Svelte does not update the DOM after click.
BThe test does not wait for the DOM update after the click event.
CThe button does not have an on:click event handler attached.
DThe test uses getByText incorrectly and cannot find the button.
Attempts:
2 left
💡 Hint
In Svelte, variables must be reactive to trigger DOM updates.
🧠 Conceptual
expert
3:00remaining
Which statement best explains why mocking a Svelte store is important in unit tests?
When unit testing a Svelte component that uses a writable store, why is it important to mock the store instead of using the real one?
AMocking the store isolates the component test from external state changes, ensuring predictable and fast tests.
BUsing the real store always causes runtime errors in tests due to Svelte internals.
CMocking the store is unnecessary because Svelte automatically resets stores between tests.
DThe real store cannot be imported in test files due to module resolution issues.
Attempts:
2 left
💡 Hint
Think about test isolation and control over data during tests.