@@ -277,7 +277,7 @@ Testing a Command that Expects Input
277
277
------------------------------------
278
278
279
279
If you want to write a unit test for a command which expects some kind of input
280
- from the command line, you need to set the helper input stream ::
280
+ from the command line, you need to set the inputs that the command expects ::
281
281
282
282
use Symfony\Component\Console\Helper\QuestionHelper;
283
283
use Symfony\Component\Console\Helper\HelperSet;
@@ -289,26 +289,28 @@ from the command line, you need to set the helper input stream::
289
289
// ...
290
290
$commandTester = new CommandTester($command);
291
291
292
- $helper = $command->getHelper('question');
293
- $helper->setInputStream($this->getInputStream("Test\n"));
292
+ $commandTester->setInputs(array('Test'));
294
293
// Equals to a user inputting "Test" and hitting ENTER
295
- // If you need to enter a confirmation, "yes\n" will work
294
+
295
+ // Equals to a user inputting "This", "That" and hitting ENTER
296
+ // This can be used for answering two separated questions for instance.
297
+ $commandTester->setInputs(array('This', 'That'));
298
+
299
+ // For simulating a positive answer to a confirmation question, adding an
300
+ // additional input saying "yes" will work
301
+ $commandTester->setInputs(array('yes'));
296
302
297
303
$commandTester->execute(array('command' => $command->getName()));
298
304
299
305
// $this->assertRegExp('/.../', $commandTester->getDisplay());
300
306
}
301
307
302
- protected function getInputStream($input)
303
- {
304
- $stream = fopen('php://memory', 'r+', false);
305
- fputs($stream, $input);
306
- rewind($stream);
307
-
308
- return $stream;
309
- }
308
+ By calling :method: `Symfony\\ Component\\ Console\\ Tester\\ CommandTester::setInputs `,
309
+ you imitate what the console would do internally with all user input through the CLI.
310
+ This method takes an array as only argument with, for each input that the command expects,
311
+ a string representing what the user would have typed.
312
+ This way you can test any user interaction (even complex ones) by passing the appropriate inputs.
310
313
311
- By setting the input stream of the ``QuestionHelper ``, you imitate what the
312
- console would do internally with all user input through the CLI. This way
313
- you can test any user interaction (even complex ones) by passing an appropriate
314
- input stream.
314
+ .. note ::
315
+ The :class: `Symfony\\ Component\\ Console\\ Tester\\ CommandTester ` automatically simulates a user
316
+ hitting ``ENTER `` after each input, no need for passing an additional input.
0 commit comments