Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/app/[username]/components/ErrorMessages.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import ErrorMessages from './ErrorMessages';

describe('ErrorMessages', () => {
it('returns null when errors array is undefined', () => {
// @ts-expect-error Testing invalid input for robustness
const { container } = render(<ErrorMessages errors={undefined} />);
expect(container.firstChild).toBeNull();
});

it('returns null when errors array is empty', () => {
const { container } = render(<ErrorMessages errors={[]} />);
expect(container.firstChild).toBeNull();
});

it('renders a single error message correctly', () => {
const errors = [{ section: 'Test Section', message: 'Test message' }];
render(<ErrorMessages errors={errors} />);

expect(screen.getByText('Test Section:')).toBeInTheDocument();
expect(screen.getByText('Test message')).toBeInTheDocument();
});
Comment on lines +17 to +23

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 screen.getByText('Test message') はエラーをスローします。{err.message} はコンポーネント内で <strong> の隣にある裸のテキストノードとして描画されるため、DOM 要素の textContent が完全一致する要素が存在しません(外側の divtextContent"Test Section: Test message" になります)。getByText はデフォルトで exact: true で動作するため、一致する要素が見つからず TestingLibraryElementError がスローされてテストが失敗します。container.toHaveTextContent を使うと、コンテナの textContent に文字列が含まれているかを検証できます。

Suggested change
it('renders a single error message correctly', () => {
const errors = [{ section: 'Test Section', message: 'Test message' }];
render(<ErrorMessages errors={errors} />);
expect(screen.getByText('Test Section:')).toBeInTheDocument();
expect(screen.getByText('Test message')).toBeInTheDocument();
});
it('renders a single error message correctly', () => {
const errors = [{ section: 'Test Section', message: 'Test message' }];
const { container } = render(<ErrorMessages errors={errors} />);
expect(screen.getByText('Test Section:')).toBeInTheDocument();
expect(container).toHaveTextContent('Test message');
});
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/app/[username]/components/ErrorMessages.test.tsx
Line: 17-23

Comment:
`screen.getByText('Test message')` はエラーをスローします。`{err.message}` はコンポーネント内で `<strong>` の隣にある裸のテキストノードとして描画されるため、DOM 要素の `textContent` が完全一致する要素が存在しません(外側の `div``textContent``"Test Section: Test message"` になります)。`getByText` はデフォルトで `exact: true` で動作するため、一致する要素が見つからず `TestingLibraryElementError` がスローされてテストが失敗します。`container.toHaveTextContent` を使うと、コンテナの textContent に文字列が含まれているかを検証できます。

```suggestion
  it('renders a single error message correctly', () => {
    const errors = [{ section: 'Test Section', message: 'Test message' }];
    const { container } = render(<ErrorMessages errors={errors} />);

    expect(screen.getByText('Test Section:')).toBeInTheDocument();
    expect(container).toHaveTextContent('Test message');
  });
```

How can I resolve this? If you propose a fix, please make it concise.


it('renders multiple error messages correctly', () => {
const errors = [
{ section: 'Section 1', message: 'Message 1' },
{ section: 'Section 2', message: 'Message 2' },
];
render(<ErrorMessages errors={errors} />);

expect(screen.getByText('Section 1:')).toBeInTheDocument();
expect(screen.getByText('Message 1')).toBeInTheDocument();
expect(screen.getByText('Section 2:')).toBeInTheDocument();
expect(screen.getByText('Message 2')).toBeInTheDocument();
});
Comment on lines +25 to +36

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 複数エラーのテストでも同じ問題が発生します。'Message 1' / 'Message 2' はいずれも単独の DOM 要素に紐付かない裸のテキストノードであるため、getByText でそれぞれを検索すると TestingLibraryElementError がスローされてテストが失敗します。container.toHaveTextContent に変更してください。

Suggested change
it('renders multiple error messages correctly', () => {
const errors = [
{ section: 'Section 1', message: 'Message 1' },
{ section: 'Section 2', message: 'Message 2' },
];
render(<ErrorMessages errors={errors} />);
expect(screen.getByText('Section 1:')).toBeInTheDocument();
expect(screen.getByText('Message 1')).toBeInTheDocument();
expect(screen.getByText('Section 2:')).toBeInTheDocument();
expect(screen.getByText('Message 2')).toBeInTheDocument();
});
it('renders multiple error messages correctly', () => {
const errors = [
{ section: 'Section 1', message: 'Message 1' },
{ section: 'Section 2', message: 'Message 2' },
];
const { container } = render(<ErrorMessages errors={errors} />);
expect(screen.getByText('Section 1:')).toBeInTheDocument();
expect(container).toHaveTextContent('Message 1');
expect(screen.getByText('Section 2:')).toBeInTheDocument();
expect(container).toHaveTextContent('Message 2');
});
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/app/[username]/components/ErrorMessages.test.tsx
Line: 25-36

Comment:
複数エラーのテストでも同じ問題が発生します。`'Message 1'` / `'Message 2'` はいずれも単独の DOM 要素に紐付かない裸のテキストノードであるため、`getByText` でそれぞれを検索すると `TestingLibraryElementError` がスローされてテストが失敗します。`container.toHaveTextContent` に変更してください。

```suggestion
  it('renders multiple error messages correctly', () => {
    const errors = [
      { section: 'Section 1', message: 'Message 1' },
      { section: 'Section 2', message: 'Message 2' },
    ];
    const { container } = render(<ErrorMessages errors={errors} />);

    expect(screen.getByText('Section 1:')).toBeInTheDocument();
    expect(container).toHaveTextContent('Message 1');
    expect(screen.getByText('Section 2:')).toBeInTheDocument();
    expect(container).toHaveTextContent('Message 2');
  });
```

How can I resolve this? If you propose a fix, please make it concise.

});
1 change: 1 addition & 0 deletions vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export default defineConfig({
"src/components/SkillsCard.tsx",
"src/components/LayoutEditor.tsx",
"src/lib/rateLimit.ts",
"src/app/[username]/components/ErrorMessages.tsx",
],
thresholds: {
lines: 80,
Expand Down
Loading