Each Magnitude test case navigates to a URL in a browser, executes Test Steps on the web application at that URL, and verifies any Checks along the way.For example:
Copy
test('can add and remove todos', async (agent) => { await agent.act('Add a todo'); await agent.act('Remove the todo');});
A test case is designed to represent a single user flow in your web app.
Each step should make sense on its own and describe a portion of the user flow.Steps should only be specific enough that it’s clear from your app’s interface how to complete the step. For example - to log into an app, you don’t need to say type into each field or what buttons to press - just provide any necessary data and say “Log in”.
You can pass custom instructions to any act call by specifing the prompt option.
Copy
test('example', async (agent) => { await agent.act('create 3 todos', { prompt: 'all todos must be animal-related' });});
You can also do this at the test or group level to apply to all acts within that block.
Copy
test.group('todo list', { prompt: 'Each todo should be exactly 5 words'}, () => { test('can add todos', { url: 'https://magnitodo.com', prompt: 'All todos should be animal related' }, async (agent) => { await agent.act('create 3 todos', { prompt: 'the first and last word on the todo must start with the same letter'}); });});
Example of migrating a Playwright test case to Magnitude
A simple test case from the Playwright demo TODO app:
Copy
test('should allow me to add todo items', async ({ page }) => { const newTodo = page.getByPlaceholder('What needs to be done?'); await newTodo.fill(TODO_ITEMS[0]); await newTodo.press('Enter'); await expect(page.getByTestId('todo-title')).toHaveText([ TODO_ITEMS[0] ]); await newTodo.fill(TODO_ITEMS[1]); await newTodo.press('Enter'); await expect(page.getByTestId('todo-title')).toHaveText([ TODO_ITEMS[0], TODO_ITEMS[1] ]); });
The same test case in Magnitude:
Copy
test('should allow me to add todo items', async (agent) => { await agent.act('Create todo', { data: TODO_ITEMS[0] }); await agent.check('First todo appears in list'); await agent.act('Create another todo', { data: TODO_ITEMS[1] }); await agent.check('List has two todos');});