22

I've recently installed laravel and have written some tests in /tests directory but when I use phpunit at cmd in the same folder that phpunit.xml exists, it says 'phpunit' is not recognized as an internal or external command,operable program or batch file.. I'm using windows 7. what should I do?

6
  • Yes I mean installed it Commented Jun 21, 2014 at 19:48
  • Did you set the environmental variable? Commented Jun 21, 2014 at 19:49
  • Environment variables for what? Commented Jun 21, 2014 at 19:50
  • To be able to run commands with phpunit. It was working before? Commented Jun 21, 2014 at 19:51
  • no it wasn't , so you mean I should add the phpunit executable to PATH yeah? Commented Jun 21, 2014 at 19:53

11 Answers 11

44

The solution for me:

php vendor/phpunit/phpunit/phpunit

This, of course, assumes you've set up a php environment variable in Windows

Sign up to request clarification or add additional context in comments.

Comments

21

As Unnawut said, it doesn't work because vendor/phpunit/phpunit/phpunit is not a native Windows executable. You need a .bat or .cmd file that will basically call 'php phpunit'. There should be one in vendor/bin, but to make life easy, try this - create a file phpunit.bat (or .cmd) at the root of your site, containing this:

@ECHO OFF
SET BIN_TARGET=%~dp0/vendor/phpunit/phpunit/phpunit
php "%BIN_TARGET%" %*

Now you can call phpunit from the command line at the root of the site.

Comments

12

If you are a window user and you are having this issue, do this:

You need to tell Window where to find PHPUnit command, you can first of all verify that this file exists in your Laravel project under /vendor/bin

enter image description here

Finally you need to append the full path to /vendor/bin in your window PATH variable,

To do this: 1. Right-click on 'Computer' then click properties

enter image description here

  1. On the second window click Advanced system settings

enter image description here

  1. On the next window under Advanced click Environmental Variables

enter image description here

  1. On the next window double-click PATH then set PATH variable by appending

the full path to your laravel-project/vendor/bin; Notice the ; at the end.

NB: Other variables might already exists in the PATH, so ensure you don't overwrite them by appending your own at the very end

  1. Finally click Ok on all the dialog boxes

enter image description here

1 Comment

Thanks for detailed explanation. Solves my problem.
5
alias phpunit="vendor/bin/phpunit"

1 Comment

While this code snippet may solve the question, including an explanation really helps to improve the quality of your post. Remember that you are answering the question for readers in the future, and those people might not know the reasons for your code suggestion. Please also try not to crowd your code with explanatory comments, as this reduces the readability of both the code and the explanations!
4

I added this command in command line instead of just "phpunit"

vendor\bin\phpunit

That worked for me.

3 Comments

I explained a bit more :)
Or you can add ./vendor/bin to the PATH environment variable. This way you can just call phpunit from any Laravel root folder.
@ArnovanOordtPlease submit your comment as an answer to this question. It easy to implement, is permanent and has global scope. It is the best answer here and deserves it's own post.
4

Install phpunit globally:

composer global require phpunit/phpunit

Afterwards you will be able to run phpunit ( even on Windows ):

phpunit

Comments

3

The phpunit executable is not in your project root folder, that's why it can't find it.

Now I assume that you already have phpunit in your composer.json file, something like this:

"require-dev": {
    "phpunit/phpunit": "3.7.*"
}

When installed by composer, the package will be installed to vendor/vendor_name/package_name. So to run it at your project root, type this command:

vendor/phpunit/phpunit/phpunit

2 Comments

composer update and after that do vendor/phpunit/phpunit/phpunit from the folder you have phpunit.xml
Oh well I guess that's as far as I could help. Good luck!
3

This working for me

In double quotes this command in console windows

"vendor/bin/phpunit"

Comments

1

Borrowing from @Chris' excellent answer:
Even better, you can make vendor/phpunit/phpunit/phpunit an environment variable, say "phpunit" and whenever you want to run the test in any laravel project you just call php %phpunit%.

Demonstration

enter image description here enter image description here

Comments

0

If it says the following:

$ phpunit tests/Feature/ExampleTest.php PHPUnit 3.7.21 by Sebastian Bergmann.

Class 'tests/Feature/ExampleTest' could not be found in 'C:\xampp\htdocs\blog1\tests\Feature\ExampleTest.php'.

Instead of typing tests/Feature/ExampleTest.php you say tests " \\Feature\\Example.test" because you're using windows, not mac. :) GL & HF

Using just \ or / will give errors :)

1 Comment

It wasn't saying that. The error message was something else
0

With Laravel phpunit is set up right out of the box. The easiest way to run it on Windows is to add an entry to scripts in your package.json file...

"scripts": {
    ...
    "tests": "php vendor/phpunit/phpunit/phpunit"
},

Now you simply run unit tests with

npm run tests

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.