面试题答案
一键面试- 首先,确保项目中安装了
@testing-library/svelte
和jest
。 - 假设Svelte按钮组件代码如下(
Button.svelte
):
<script>
let count = 0;
const updateCount = () => {
count++;
return 'update success';
};
</script>
<button on:click={updateCount}>Click me</button>
- 编写测试用例(
Button.test.js
):
import { render, screen } from '@testing-library/svelte';
import Button from './Button.svelte';
jest.mock('./Button.svelte', () => {
const originalModule = jest.requireActual('./Button.svelte');
return {
...originalModule,
updateCount: jest.fn(() => 'Mocked return value')
};
});
describe('Button Component', () => {
it('should update the state variable on button click and have correct mock return value', () => {
render(Button);
const button = screen.getByText('Click me');
expect(button).toBeInTheDocument();
const mockUpdateCount = jest.fn(() => 'Mocked return value');
Object.defineProperty(Button.prototype, 'updateCount', {
value: mockUpdateCount
});
button.click();
expect(mockUpdateCount).toHaveBeenCalled();
expect(mockUpdateCount()).toBe('Mocked return value');
});
});
上述测试中:
- 首先使用
render
函数渲染Svelte组件。 - 通过
screen.getByText
获取按钮元素,并确认按钮在文档中。 - 使用
jest.mock
模拟updateCount
函数的返回值。 - 点击按钮后,使用
expect(mockUpdateCount).toHaveBeenCalled()
验证函数是否被调用,使用expect(mockUpdateCount()).toBe('Mocked return value')
验证模拟函数的返回值。