These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | namespace Robo\Task\Testing; |
||
3 | |||
4 | use Robo\Contract\PrintedInterface; |
||
5 | use Robo\Exception\TaskException; |
||
6 | use Robo\Task\BaseTask; |
||
7 | use Robo\Contract\CommandInterface; |
||
8 | use Symfony\Component\Process\Process; |
||
9 | |||
10 | /** |
||
11 | * Executes Codeception tests |
||
12 | * |
||
13 | * ``` php |
||
14 | * <?php |
||
15 | * // config |
||
16 | * $this->taskCodecept() |
||
17 | * ->suite('acceptance') |
||
18 | * ->env('chrome') |
||
19 | * ->group('admin') |
||
20 | * ->xml() |
||
21 | * ->html() |
||
22 | * ->run(); |
||
23 | * |
||
24 | * ?> |
||
25 | * ``` |
||
26 | * |
||
27 | */ |
||
28 | class Codecept extends BaseTask implements CommandInterface, PrintedInterface |
||
29 | { |
||
30 | use \Robo\Common\ExecOneCommand; |
||
31 | |||
32 | /** |
||
33 | * @var string |
||
34 | */ |
||
35 | protected $command; |
||
36 | |||
37 | /** |
||
38 | * @param string $pathToCodeception |
||
39 | * |
||
40 | * @throws \Robo\Exception\TaskException |
||
41 | */ |
||
42 | View Code Duplication | public function __construct($pathToCodeception = '') |
|
0 ignored issues
–
show
|
|||
43 | { |
||
44 | $this->command = $pathToCodeception; |
||
45 | if (!$this->command) { |
||
46 | $this->command = $this->findExecutable('codecept'); |
||
47 | } |
||
48 | if (!$this->command) { |
||
49 | throw new TaskException(__CLASS__, "Neither composer nor phar installation of Codeception found."); |
||
50 | } |
||
51 | $this->command .= ' run'; |
||
52 | } |
||
53 | |||
54 | /** |
||
55 | * @param string $suite |
||
56 | * |
||
57 | * @return $this |
||
58 | */ |
||
59 | public function suite($suite) |
||
60 | { |
||
61 | $this->option(null, $suite); |
||
62 | return $this; |
||
63 | } |
||
64 | |||
65 | /** |
||
66 | * @param string $testName |
||
67 | * |
||
68 | * @return $this |
||
69 | */ |
||
70 | public function test($testName) |
||
71 | { |
||
72 | $this->option(null, $testName); |
||
73 | return $this; |
||
74 | } |
||
75 | |||
76 | /** |
||
77 | * set group option. Can be called multiple times |
||
78 | * |
||
79 | * @param string $group |
||
80 | * |
||
81 | * @return $this |
||
82 | */ |
||
83 | public function group($group) |
||
84 | { |
||
85 | $this->option("group", $group); |
||
86 | return $this; |
||
87 | } |
||
88 | |||
89 | /** |
||
90 | * @param string $group |
||
91 | * |
||
92 | * @return $this |
||
93 | */ |
||
94 | public function excludeGroup($group) |
||
95 | { |
||
96 | $this->option("skip-group", $group); |
||
97 | return $this; |
||
98 | } |
||
99 | |||
100 | /** |
||
101 | * generate json report |
||
102 | * |
||
103 | * @param string $file |
||
104 | * |
||
105 | * @return $this |
||
106 | */ |
||
107 | public function json($file = null) |
||
108 | { |
||
109 | $this->option("json", $file); |
||
110 | return $this; |
||
111 | } |
||
112 | |||
113 | /** |
||
114 | * generate xml JUnit report |
||
115 | * |
||
116 | * @param string $file |
||
117 | * |
||
118 | * @return $this |
||
119 | */ |
||
120 | public function xml($file = null) |
||
121 | { |
||
122 | $this->option("xml", $file); |
||
123 | return $this; |
||
124 | } |
||
125 | |||
126 | /** |
||
127 | * Generate html report |
||
128 | * |
||
129 | * @param string $dir |
||
130 | * |
||
131 | * @return $this |
||
132 | */ |
||
133 | public function html($dir = null) |
||
134 | { |
||
135 | $this->option("html", $dir); |
||
136 | return $this; |
||
137 | } |
||
138 | |||
139 | /** |
||
140 | * generate tap report |
||
141 | * |
||
142 | * @param string $file |
||
143 | * |
||
144 | * @return $this |
||
145 | */ |
||
146 | public function tap($file = null) |
||
147 | { |
||
148 | $this->option("tap", $file); |
||
149 | return $this; |
||
150 | } |
||
151 | |||
152 | /** |
||
153 | * provides config file other then default `codeception.yml` with `-c` option |
||
154 | * |
||
155 | * @param string $file |
||
156 | * |
||
157 | * @return $this |
||
158 | */ |
||
159 | public function configFile($file) |
||
160 | { |
||
161 | $this->option("-c", $file); |
||
162 | return $this; |
||
163 | } |
||
164 | |||
165 | /** |
||
166 | * collect codecoverage in raw format. You may pass name of cov file to save results |
||
167 | * |
||
168 | * @param null|string $cov |
||
169 | * |
||
170 | * @return $this |
||
171 | */ |
||
172 | public function coverage($cov = null) |
||
173 | { |
||
174 | $this->option("coverage", $cov); |
||
175 | return $this; |
||
176 | } |
||
177 | |||
178 | /** |
||
179 | * execute in silent mode |
||
180 | * |
||
181 | * @return $this |
||
182 | */ |
||
183 | public function silent() |
||
184 | { |
||
185 | $this->option("silent"); |
||
186 | return $this; |
||
187 | } |
||
188 | |||
189 | /** |
||
190 | * collect code coverage in xml format. You may pass name of xml file to save results |
||
191 | * |
||
192 | * @param string $xml |
||
193 | * |
||
194 | * @return $this |
||
195 | */ |
||
196 | public function coverageXml($xml = null) |
||
197 | { |
||
198 | $this->option("coverage-xml", $xml); |
||
199 | return $this; |
||
200 | } |
||
201 | |||
202 | /** |
||
203 | * collect code coverage and generate html report. You may pass |
||
204 | * |
||
205 | * @param string $html |
||
206 | * |
||
207 | * @return $this |
||
208 | */ |
||
209 | public function coverageHtml($html = null) |
||
210 | { |
||
211 | $this->option("coverage-html", $html); |
||
212 | return $this; |
||
213 | } |
||
214 | |||
215 | /** |
||
216 | * @param string $env |
||
217 | * |
||
218 | * @return $this |
||
219 | */ |
||
220 | public function env($env) |
||
221 | { |
||
222 | $this->option("env", $env); |
||
223 | return $this; |
||
224 | } |
||
225 | |||
226 | /** |
||
227 | * @return $this |
||
228 | */ |
||
229 | public function debug() |
||
230 | { |
||
231 | $this->option("debug"); |
||
232 | return $this; |
||
233 | } |
||
234 | |||
235 | /** |
||
236 | * @return $this |
||
237 | */ |
||
238 | public function noRebuild() |
||
239 | { |
||
240 | $this->option("no-rebuild"); |
||
241 | return $this; |
||
242 | } |
||
243 | |||
244 | /** |
||
245 | * @param string $failGroup |
||
246 | * @return $this |
||
247 | */ |
||
248 | public function failGroup($failGroup) |
||
249 | { |
||
250 | $this->option('override', "extensions: config: Codeception\\Extension\\RunFailed: fail-group: {$failGroup}"); |
||
251 | return $this; |
||
252 | } |
||
253 | |||
254 | /** |
||
255 | * {@inheritdoc} |
||
256 | */ |
||
257 | public function getCommand() |
||
258 | { |
||
259 | return $this->command . $this->arguments; |
||
260 | } |
||
261 | |||
262 | /** |
||
263 | * {@inheritdoc} |
||
264 | */ |
||
265 | public function run() |
||
266 | { |
||
267 | $command = $this->getCommand(); |
||
268 | $this->printTaskInfo('Executing {command}', ['command' => $command]); |
||
269 | return $this->executeCommand($command); |
||
270 | } |
||
271 | } |
||
272 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.