-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNewsCard.test.js
62 lines (51 loc) · 1.99 KB
/
NewsCard.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import NewsCard from '../components/news/NewsCard';
describe("NewsCard", () => {
const news = {
source: "News Source",
publishedAt: "2023-10-01",
title: "News Title",
description: "News Description",
rssUrl: "https://example.com/news",
coverImageUrl: "https://example.com/image.jpg"
};
it("renders without crashing", () => {
render(<NewsCard news={news} />);
expect(screen.getByText("News Source")).toBeTruthy();
});
it("renders news source", () => {
render(<NewsCard news={news} />);
expect(screen.getByText(news.source)).toBeTruthy();
});
it("renders news published date", () => {
render(<NewsCard news={news} />);
expect(screen.getByText(news.publishedAt)).toBeTruthy();
});
it("renders news title", () => {
render(<NewsCard news={news} />);
expect(screen.getByText(news.title)).toBeTruthy();
});
it("renders news description", () => {
render(<NewsCard news={news} />);
expect(screen.getByText(news.description)).toBeTruthy();
});
it("renders cover image if provided", () => {
render(<NewsCard news={news} />);
const image = screen.getByAltText(news.source);
expect(image).toBeTruthy();
expect(image).toHaveAttribute('src', news.coverImageUrl);
});
it("does not render cover image if not provided", () => {
const newsWithoutImage = { ...news, coverImageUrl: null };
render(<NewsCard news={newsWithoutImage} />);
expect(screen.queryByAltText(news.source)).toBeNull();
});
it("opens news link in a new tab when clicked", () => {
window.open = jest.fn();
render(<NewsCard news={news} />);
fireEvent.click(screen.getByText(news.title));
expect(window.open).toHaveBeenCalledWith(news.rssUrl, '_blank');
});
});