-
Notifications
You must be signed in to change notification settings - Fork 93
/
Copy path05-component-provider.spec.ts
83 lines (64 loc) · 2.85 KB
/
05-component-provider.spec.ts
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { TestBed } from '@angular/core/testing';
import { render, screen } from '@testing-library/angular';
import { provideMock, Mock, createMock } from '@testing-library/angular/jest-utils';
import userEvent from '@testing-library/user-event';
import { ComponentWithProviderComponent, CounterService } from './05-component-provider';
test('renders the current value and can increment and decrement', async () => {
const user = userEvent.setup();
await render(ComponentWithProviderComponent, {
componentProviders: [
{
provide: CounterService,
useValue: new CounterService(),
},
],
});
const incrementControl = screen.getByRole('button', { name: /increment/i });
const decrementControl = screen.getByRole('button', { name: /decrement/i });
const valueControl = screen.getByTestId('value');
expect(valueControl).toHaveTextContent('0');
await user.click(incrementControl);
await user.click(incrementControl);
expect(valueControl).toHaveTextContent('2');
await user.click(decrementControl);
expect(valueControl).toHaveTextContent('1');
});
test('renders the current value and can increment and decrement with a mocked jest-utils service', async () => {
const user = userEvent.setup();
const counter = createMock(CounterService);
let fakeCounterValue = 50;
counter.increment.mockImplementation(() => (fakeCounterValue += 10));
counter.decrement.mockImplementation(() => (fakeCounterValue -= 10));
counter.value.mockImplementation(() => fakeCounterValue);
await render(ComponentWithProviderComponent, {
componentProviders: [
{
provide: CounterService,
useValue: counter,
},
],
});
const incrementControl = screen.getByRole('button', { name: /increment/i });
const decrementControl = screen.getByRole('button', { name: /decrement/i });
const valueControl = screen.getByTestId('value');
expect(valueControl).toHaveTextContent('50');
await user.click(incrementControl);
await user.click(incrementControl);
expect(valueControl).toHaveTextContent('70');
await user.click(decrementControl);
expect(valueControl).toHaveTextContent('60');
});
test('renders the current value and can increment and decrement with provideMocked from jest-utils', async () => {
const user = userEvent.setup();
await render(ComponentWithProviderComponent, {
componentProviders: [provideMock(CounterService)],
});
const incrementControl = screen.getByRole('button', { name: /increment/i });
const decrementControl = screen.getByRole('button', { name: /decrement/i });
await user.click(incrementControl);
await user.click(incrementControl);
await user.click(decrementControl);
const counterService = TestBed.inject(CounterService) as Mock<CounterService>;
expect(counterService.increment).toHaveBeenCalledTimes(2);
expect(counterService.decrement).toHaveBeenCalledTimes(1);
});