📖 Scenario: You are building a simple Svelte component that shows a message based on a number. You want to write unit tests to check the logic that decides which message to show.
🎯 Goal: Create a Svelte component with a number variable and a function that returns a message based on that number. Then write unit tests to check the function's logic.
📋 What You'll Learn
Create a Svelte component with a number variable set to 10
Add a function getMessage that returns 'High' if number > 50, else 'Low'
Write a unit test to check getMessage returns 'Low' when number is 10
Write a unit test to check getMessage returns 'High' when number is 60
💡 Why This Matters
🌍 Real World
Unit testing logic in components helps catch bugs early and ensures your app behaves as expected.
💼 Career
Writing unit tests is a key skill for frontend developers to maintain reliable and maintainable codebases.
Progress0 / 4 steps
1
Create the Svelte component with a number variable
Create a Svelte component file with a number variable set to 10 inside a <script> tag.
Svelte
Hint
Use let number = 10; inside the <script> tag.
2
Add the getMessage function to decide the message
Inside the <script> tag, add a function called getMessage that returns 'High' if number > 50, otherwise returns 'Low'.
Svelte
Hint
Use a ternary operator inside the function to return the correct string.
3
Write a unit test for getMessage returning 'Low' when number is 10
Create a test file and write a unit test that sets number to 10 and checks that getMessage() returns 'Low'.
Svelte
Hint
Use vitest to write the test with describe, it, and expect.
4
Write a unit test for getMessage returning 'High' when number is 60
Add another unit test that sets number to 60 and checks that getMessage() returns 'High'.
Svelte
Hint
Add a new it block inside the describe to test the 'High' case.
Practice
(1/5)
1. What is the main purpose of unit testing in Svelte applications?
easy
A. To write HTML templates
B. To style components with CSS
C. To check small parts of code for errors early
D. To deploy the app to production
Solution
Step 1: Understand unit testing purpose
Unit testing focuses on testing small, isolated parts of code to find bugs early.
Step 2: Compare options to unit testing goal
Only To check small parts of code for errors early describes checking small code parts for errors early, which matches unit testing.
Final Answer:
To check small parts of code for errors early -> Option C
Quick Check:
Unit testing = check small code parts early [OK]
Hint: Unit tests check small code parts, not styling or deployment [OK]
Common Mistakes:
Confusing unit testing with styling or deployment
Thinking unit tests write HTML templates
Assuming unit tests run only in production
2. Which of the following is the correct syntax to define a test case in Svelte using Vitest or Jest?
easy
A. test('test case') { /* test code */ }
B. describe 'test group' { it 'test case' { /* test code */ } }
C. it 'test case' => { /* test code */ }
D. describe('test group', () => { it('test case', () => { /* test code */ }) })
Solution
Step 1: Recall correct test syntax
In Vitest/Jest, tests use describe() and it() functions with arrow functions.
Step 2: Check each option's syntax
describe('test group', () => { it('test case', () => { /* test code */ }) }) uses correct parentheses and arrow functions. Others miss parentheses or use wrong syntax.
Final Answer:
describe('test group', () => { it('test case', () => { /* test code */ }) }) -> Option D
Quick Check:
describe and it with arrow functions = correct syntax [OK]
Hint: Use parentheses and arrow functions with describe and it [OK]
Common Mistakes:
Omitting parentheses around function arguments
Using wrong arrow function syntax
Confusing test and it keywords
3. Given this test code snippet, what will be the test result?
describe('sum function', () => {
it('adds two numbers', () => {
const sum = (a, b) => a + b;
expect(sum(2, 3)).toBe(5);
});
});
medium
A. The test will pass because 2 + 3 equals 5
B. The test will fail because sum is not defined
C. The test will fail because toBe is not a function
D. The test will throw a syntax error
Solution
Step 1: Analyze the sum function and test
The sum function adds two numbers correctly. The test checks if sum(2, 3) equals 5.
Step 2: Evaluate the expect statement
expect(sum(2, 3)).toBe(5) compares 5 to 5, which is true, so the test passes.
Final Answer:
The test will pass because 2 + 3 equals 5 -> Option A
Quick Check:
sum(2,3) = 5, expect toBe(5) passes [OK]
Hint: Check function output matches expected value exactly [OK]
Common Mistakes:
Assuming sum is undefined
Confusing toBe with other matchers
Thinking syntax error occurs here
4. Identify the error in this Svelte unit test code:
describe('multiply function', () => {
it('multiplies two numbers', () => {
const multiply = (a, b) => a * b
expect(multiply(2, 3)).toBe(6)
}
});
medium
A. Missing closing parenthesis for the it block
B. multiply function is not defined
C. toBe matcher is used incorrectly
D. describe block is missing a callback function
Solution
Step 1: Check syntax of it block
The it block starts with a parenthesis but lacks a closing parenthesis before the closing brace.
Step 2: Verify other parts
multiply is defined correctly, toBe is used properly, and describe has a callback function.
Final Answer:
Missing closing parenthesis for the it block -> Option A
Quick Check:
Syntax error due to missing parenthesis [OK]
Hint: Count opening and closing parentheses carefully [OK]
Common Mistakes:
Ignoring missing parentheses errors
Thinking multiply is undefined
Assuming toBe usage is wrong
5. You want to write a unit test in Svelte that checks if a function returns the correct value only when the input is positive. Which test logic correctly implements this condition?
function checkPositive(n) {
return n > 0 ? 'positive' : 'not positive';
}
hard
A. expect(checkPositive(0)).toBe('positive'); expect(checkPositive(5)).toBe('not positive');
B. expect(checkPositive(5)).toBe('positive'); expect(checkPositive(-1)).toBe('not positive');
C. expect(checkPositive(-5)).toBe('positive'); expect(checkPositive(5)).toBe('positive');
D. expect(checkPositive(5)).toBe('not positive'); expect(checkPositive(-1)).toBe('positive');
Solution
Step 1: Understand function behavior
checkPositive returns 'positive' if input > 0, else 'not positive'.
Step 2: Match test expectations to function logic
expect(checkPositive(5)).toBe('positive'); expect(checkPositive(-1)).toBe('not positive'); tests positive input 5 returns 'positive' and negative input -1 returns 'not positive', matching function logic.
Final Answer:
expect(checkPositive(5)).toBe('positive'); expect(checkPositive(-1)).toBe('not positive'); -> Option B
Quick Check:
Test matches function output for positive and negative inputs [OK]
Hint: Test both positive and negative inputs to cover conditions [OK]
Common Mistakes:
Testing zero as positive incorrectly
Swapping expected results for inputs
Testing only one input case
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.