yeoman / generator-backbone

Scaffold out a Backbone.js project
http://yeoman.io
638 stars 157 forks source link

Tests just don't seem to run at all in grunt serve #219

Open jtmkrueger opened 10 years ago

jtmkrueger commented 10 years ago

I'm going to apologize beforehand, because I think I must be doing something obviously wrong, and I probably don't understand the underlying code enough to pinpoint it.

First off, Here's my Gruntfile.js. The only real modifications I've made are including sass.

Whenever I change a test file, I just see

Running "mocha:all" (mocha) task
>> 0 passed! (0.00s)

fly by, even if I put obvious errors in the generated test files that should throw SyntaxErrors.

Is there something else I need to add to the gruntfile, or do I need to make changes to my test/index.html (here)?

UPDATE So until I get this figured out, I just started testing in the browser by loading up test/index.html. I updated the gist above to reflect where I'm at now, and this is working fine for me, but obviously I'd prefer to be using the cli interface.

gilbarbara commented 10 years ago

@jtmkrueger edit your gruntfile and replace src with urls in the mocha task.

generalov commented 10 years ago

I create new yo backbone project with:

$ yo backbone --test-framework=mocha --template-framework=handlebars

When I run grunt serve, and I open test/spec/test.js in the editor and save it Then I see in console a Warning: PhantomJS unable to load "http://localhost:9001/index.html" URI.

$ grunt serve
...
>> File "test/spec/test.js" changed.
Running "test:true" (test) task
Running "clean:server" (clean) task
Cleaning .tmp...OK
Running "coffee:dist" (coffee) task
Running "coffee:test" (coffee) task
Running "createDefaultTemplate" task
Running "handlebars:compile" (handlebars) task
File ".tmp/scripts/templates.js" created.
Running "mocha:all" (mocha) task
Testing: http://localhost:9001/index.html
...ERROR
Warning: PhantomJS unable to load "http://localhost:9001/index.html" URI.
... Reload test/spec/test.js ...
... Reload .tmp/scripts/templates.js ...
... Reload test/spec/test.js ...
... Reload .tmp/scripts/templates.js ...
... Reload test/spec/test.js ...
... Reload .tmp/scripts/templates.js ...
... Reload test/spec/test.js ...
... Reload test/spec/test.js ...
... Reload test/spec/test.js ...
>> 0 passed! (NaNs)
Running "watch" task
Waiting...

Tests are works when I run grunt test, but I can't to run grunt serve and grunt test at the same time (is this an another issue?):

$ grunt serve
# and in other console
$ grunt test
...
Running "mocha:all" (mocha) task
Testing: http://localhost:9001/index.html
  ․
  1 passing (3ms)
>> 1 passed! (0.00s)
Running "watch:test" (watch) task
Waiting...Fatal error: Port 35729 is already in use by another process.
debajyotimahanta commented 10 years ago

did any fix this or found a solution to this. I am having the same issue workins on grunt test, but when i do grunt serve or grunt watch it fails with PhantomJS unable to load .....

debajyotimahanta commented 10 years ago

figured out the issue had to run grunt test and not grunt watch because thats the task registered in gruntfile.js

lesterzone commented 10 years ago

From this awesome post: http://puigcerber.wordpress.com/2013/12/23/using-grunt-to-run-mocha-tests-with-backbone-js-and-requirejs/ and some changes.

Gruntfile.js

mocha: {
    all: {
        options: {
            run: true,
            log: true,
            reporter: 'Spec',
            // reporter: 'Nyan', Nyan? Seriously ? Yeah! :)
            // reporter: 'Progress',
            timeout: 10000,
            // src property used by default, which doesn't work
            // src: ['http://localhost:<%= connect.test.options.port %>/index.html']
            urls: ['http://localhost:<%= connect.test.options.port %>/index.html']
        }
    }
},

tests/index.html

<body>
    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script src="bower_components/underscore/underscore.js"></script>
    <script src="bower_components/backbone/backbone.js"></script>

    <div id="mocha"></div>
    <script src="bower_components/mocha/mocha.js"></script>
    <script>mocha.setup('bdd')</script>
    <script src="bower_components/chai/chai.js"></script>
    <script>
        var assert = chai.assert;
        var expect = chai.expect;
        var should = chai.should();
    </script>

    <!-- include source files here... -->
    <script src="scripts/main.js"></script>

    <!-- you need this file for templates -->
    <script src='scripts/templates.js'></script>

    <!-- models, collections and views ORDER MATTERS  -->
    <script src="scripts/models/YOUR-MODEL.js"></script>

    <!-- your test files -->
    <script src="test/models/model.js"></script>
    ...

    <!-- include spec files here... -->
    <script src="spec/test.js"></script>
    ...

    <script>
        mocha.run();
    </script>
</body>
</html>

Run CLI:

grunt test

Run browser

grunt serve:test
barbagallo commented 10 years ago

@lesterzone Thanks man, this worked for me, has anyone submitted a patch to fix the src/urls issue in the Gruntfile?

gilbarbara commented 10 years ago

I have submitted a fix a few MONTHS ago.

davidham commented 10 years ago

I am still seeing this issue. 'grunt serve' initiates a watch task, which does its usual thing whenever I save a file. However, when it runs the mocha:all task, PhantomJS can't load the test runner file. Here's my output:

$ grunt serve
Running "serve" task

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "createDefaultTemplate" task

Running "jst:compile" (jst) task
>> Destination not written because compiled files were empty.

Running "compass:server" (compass) task
directory .tmp/styles
    write .tmp/styles/main.css (0.003s)

Running "connect:livereload" (connect) task
Started connect web server on http://localhost:9000

Running "open:server" (open) task

Running "watch" task
Waiting...
>> File "test/spec/test.js" changed.

Running "test:true" (test) task

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "createDefaultTemplate" task

Running "jst:compile" (jst) task
>> Destination not written because compiled files were empty.

Running "compass:dist" (compass) task
directory .tmp/styles
    write .tmp/styles/main.css (0.002s)

Running "compass:server" (compass) task

Running "mocha:all" (mocha) task
Testing: http://localhost:9001/index.html
...ERROR
Warning: PhantomJS unable to load "http://localhost:9001/index.html" URI.
>> 0 passed! (NaNs)

Running "watch" task
Waiting...

I'd love it to run my tests as part of 'watch', is this the intended behavior?