Last active
August 29, 2015 14:04
-
-
Save laracasts/3c306e764be369ece23e to your computer and use it in GitHub Desktop.
I want an acceptance test for an Artisan command that generates some files with boilerplate. However, this command is part of a Composer package. I'm trying to figure out the best way to actually call Artisan from the package. Right now, I'm just assuming the framework and doing ../../../artisan. Is there an alternative/better way that you'd sug…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$saveDir = './tests/acceptance/tmp'; | |
$stubDir = './tests/acceptance/stubs'; | |
$commandToGenerate = 'FooCommand'; | |
$I = new AcceptanceTester($scenario); | |
$I->wantTo('generate a command and handler class'); | |
// Is there a better way to call the Artisan command? Without having to expect the framework and do ../../../? | |
$I->runShellCommand("php ../../../artisan commander:generate $commandToGenerate --properties='bar, baz' --base='$saveDir'"); | |
$I->seeInShellOutput('All done!'); | |
// My Command stub should match the generated class. | |
$I->openFile("{$saveDir}/{$commandToGenerate}.php"); | |
$I->seeFileContentsEqual(file_get_contents("{$stubDir}/{$commandToGenerate}.stub")); | |
// And my CommandHandler stub should match its generated counterpart, as well. | |
$I->openFile("{$saveDir}/{$commandToGenerate}Handler.php"); | |
$I->seeFileContentsEqual(file_get_contents("{$stubDir}/{$commandToGenerate}Handler.stub")); | |
$I->cleanDir($saveDir); |
I'd create a runArtisanCommand
method in AcceptanceHelper to execute artisan commands.
To match root directory you can use codecept_root_dir
function
modules:
enabled: ArtisanHelper
<?php
class ArtisanHelper extends \Codeception\Module
{
function runArtisanCommand($command)
{
chdir(codecept_root_dir());
$this->getModule('Cli')->runShellCommand("php artisan $command");
}
}
If codecept_root_dir is not what you need you can use ../../../
inside of runArtisanCommand
Abyway that would be less ugly than using ../../ inside of tests
@DavertMik codeception already has a function callArtisan how to check out put of it
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It won't be long: laravel/laravel#2218. I'd wait, if you can't, I'm afraid the ../../../ is the best way. Good luck!