node.js - Mocha kræver make. Kan ikke finde en make.exe, der fungerer på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Mokka (testramme for Node.js) bruger make.


For mit liv kan jeg ikke finde en kompatibel make.exe til Windows.


Alt fungerer fint på min Mac.


Jeg har forsøgt at bruge VS 's nmake.exe og en make.exe fandt jeg, der blev hentet fra Unix. Men de er alle uforenelige.


Det kan ikke være mig


Her er makefile:


test:
    @./node\_modules/.bin/mocha -u tdd -R spec

.PHONY: test


gøre barfs på. i PHONY, og selvom jeg fjerner det, kører det aldrig kommandoen mocha (eller i det mindste er der ingen output).


Running ./node\_modules/.bin/mocha -u -tdd -R spec giver mig direkte min testrapport:


first suite -
  ? ten should always be equal to 9+1
  ? zero is less all positive numbers
  ? There is no i in team

 ? 3 tests complete (8ms)


EDIT 3/25/12




  • Til sidst er den nemmeste måde at håndtere dette på at bruge Cygwin og sikre, at udviklerpakkerne til Cygwin er installeret. I PowerShell arbejdede jeg Set-Alias make "c:devutilscygwininmake.exe" og nu make test på standard Mocha Makefiles.


Bedste reference


Hej jeg føler dig;) Jeg er en del af et team, der er optaget af at opbygge en ny opstart med node. To af vores dev'er er på OSX, den ene er på Linux. Jeg er på Windows.


Jeg downloadede og brugte GNU 's' Make for Windows 'og kan nu helt sikkert gøre vores installations- og test-suiter. [14]


Jeg opfordrer også stærkt dig til at bruge PowerShell - den har en række kommandoer aliased til UNIX-venlige kommandoer (f.eks. Get-ChildItem -> ls). Dette gør det muligt for flere af vores scripts at arbejde på UNIX eller Windows uden ændring.


Så til dit problem:


Prøv at erstatte din makefile ovenfor med følgende:


# Detect if we're running Windows
ifdef SystemRoot
    # If so, set the file & folder deletion commands:
    FixPath = $(subst /,,$1)
else
    # Otherwise, assume we're running *N*X:
    FixPath = $1
endif

NODE\_MODULES := ./node\_modules/.bin/

test: 
    $(call FixPath, NODE\_MODULES)mocha -u tdd -R spec

.PHONY: test


Bemærk: Med Makefiles skal opgaver inden for mål indrykkes med faner, ikke mellemrum! Gå figur !!


Jeg stjal FixPath rutinen fra dette indlæg (tak Paul :)). Det erstatter en streng 's/med \ hvis køre på Windows.


Et af problemerne med at gøre på Windows er, at det skiller sig ud til NTs kommando shell (via CreateProcess) for at udføre hver opgave. Det betyder, at alle N X-isms, som Powershell ellers ville håndtere (f.eks. ls, kat osv.) vandt ikke, når man udfører makefiles. Således anbefales det at erstatte inline-kommandoer med overrideable aliaser, som du kan indstille til en kommando for NT og en anden til N X.


Måske vil jeg komme rundt for at forkaste Gnu Make og se, om jeg kan få det til at falde ud til Powershell, når jeg udfører kommandoer i stedet for NT-kommandolinjen. Det ville også fjerne behovet for FixPaths ovenfor;)


Ping mig, hvis du sidder fast

Andre referencer 1


Du kan bruge kommandøren til at implementere din egen version i node.js! Jeg bruger det til mine projekter, på trods af at jeg er på Mac. Det skal arbejde hvor som helst, hvor knude er installeret. [16]


Følgende script forudsætter, at dine cli-scripts ligger i /path/to/your/app/cli.


node cli/test.js -u # runs unit tests in /path/to/your/app/tests/unit


node cli/test.js -f # runs functional tests in /path/to/your/app/tests/functional


test.js


/*
 * CLI for execution of the mocha test suite.
 *
 * test.js --help for instructions.
 */

var program = require('commander');

program
    .version('1.0.0')
    .option('-u, --unit', 'Run unit tests.')
    .option('-f, --functional', 'Run functional tests.')
    .on('--help', function(){
        console.log('Executes the mocha testsuite.');
        console.log('');
    })
   .parse(process.argv)
;

if(!program.unit && !program.functional) {
    console.log();
    console.log('Specify if you want to run unit tests (-u) or functional tests (-f).');
    console.log('Run help (-h) for detailed instructions.');
    console.log();
}

if(program.unit) {
     require('child\_process').exec(\_\_dirname + '/../node\_modules/.bin/mocha -u tdd -R spec --recursive -c ' + \_\_dirname + '/../tests/unit', standardOutput);
}

 if(program.functional) {
require('child\_process').exec(\_\_dirname + '/../node\_modules/.bin/mocha -u bdd -R spec --recursive -c ' + \_\_dirname + '/../tests/functional', standardOutput);
}

/**
 * Standard output.
 *
 * @method standardOutput
 * @param {Object} error
 * @param {String} stdout the cli standard output
 * @param {String} stderr output of errors
 */
function standardOutput(error, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
}

Andre referencer 2


For dem, der ikke ønsker at bruge make, kan du også installere mocha globalt, så det virker i den almindelige Windows kommandolinje:


npm install -g mocha


Kør derefter dine tests med mocha path o est.js

Andre referencer 3


Hvis du bruger cygwin's make (cygwin/bin/make.exe), skal du være opmærksom på, at det forventer faneparatorer i makefiles. Hvis din editor konverterer faner til mellemrum, vil du ende med at få fejl som



  makefile: 23: * mangler separator. Hold op.



Jeg har læst, at GNU's Make for Windows, nævnt ovenfor, er ok med mellemrum eller faner, men jeg har ikke prøvet det endnu.


Se, hvordan du bruger Mokka til Node Testing i Windows til flere specifikationer. [17]