/
SupportTesting.php
111 lines (88 loc) · 3.77 KB
/
SupportTesting.php
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
namespace Livewire\Features\SupportTesting;
use Illuminate\Validation\ValidationException;
use Livewire\Mechanisms\ComponentRegistry;
use Livewire\ComponentHook;
use Livewire\Component;
class SupportTesting extends ComponentHook
{
static function provide()
{
if (! app()->environment('testing')) return;
if (class_exists('Laravel\Dusk\Browser')) {
DuskTestable::provide();
}
static::registerTestingMacros();
}
function dehydrate($context)
{
$target = $this->component;
$errors = $target->getErrorBag();
if (! $errors->isEmpty()) {
$this->storeSet('testing.errors', $errors);
}
}
function hydrate()
{
$this->storeSet('testing.validator', null);
}
function exception($e, $stopPropagation) {
if (! $e instanceof ValidationException) return;
$this->storeSet('testing.validator', $e->validator);
}
protected static function registerTestingMacros()
{
// Usage: $this->assertSeeLivewire('counter');
\Illuminate\Testing\TestResponse::macro('assertSeeLivewire', function ($component) {
if (is_subclass_of($component, Component::class)) {
$component = app(ComponentRegistry::class)->getName($component);
}
$escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
\PHPUnit\Framework\Assert::assertStringContainsString(
$escapedComponentName,
$this->getContent(),
'Cannot find Livewire component ['.$component.'] rendered on page.'
);
return $this;
});
// Usage: $this->assertDontSeeLivewire('counter');
\Illuminate\Testing\TestResponse::macro('assertDontSeeLivewire', function ($component) {
if (is_subclass_of($component, Component::class)) {
$component = app(ComponentRegistry::class)->getName($component);
}
$escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
\PHPUnit\Framework\Assert::assertStringNotContainsString(
$escapedComponentName,
$this->getContent(),
'Found Livewire component ['.$component.'] rendered on page.'
);
return $this;
});
if (class_exists(\Illuminate\Testing\TestView::class)) {
\Illuminate\Testing\TestView::macro('assertSeeLivewire', function ($component) {
if (is_subclass_of($component, Component::class)) {
$component = app(ComponentRegistry::class)->getName($component);
}
$escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
\PHPUnit\Framework\Assert::assertStringContainsString(
$escapedComponentName,
$this->rendered,
'Cannot find Livewire component ['.$component.'] rendered on page.'
);
return $this;
});
\Illuminate\Testing\TestView::macro('assertDontSeeLivewire', function ($component) {
if (is_subclass_of($component, Component::class)) {
$component = app(ComponentRegistry::class)->getName($component);
}
$escapedComponentName = trim(htmlspecialchars(json_encode(['name' => $component])), '{}');
\PHPUnit\Framework\Assert::assertStringNotContainsString(
$escapedComponentName,
$this->rendered,
'Found Livewire component ['.$component.'] rendered on page.'
);
return $this;
});
}
}
}