CaffeineAddiction
CaffeineAddiction

Reputation: 823

Node Mocha Chai Async - Everything Passing even when it should fail

I was attempting to teach myself to use a Testing framework for automating tests instead of having to do them by hand. After a bit of trial and error, I finally got the unit tests to start passing ... but now, my problem is everything is passing regardless of if it should or not.

Currently I have the following code:

describe('create {authName, authPW}', function() {
  it('no name', function() {
    init({
      path: ':memory:',
      callback: function() {
        var arg;
        arg = {};
        //arg['authName'] = 'Name';
        arg['authPW'] = 'Pass';
        arg['callback'] = function(r) {
          // r.should.equal('create error');
          r.should.equal('foobar');
          done();
        };
        create(arg);
      }
    });
  });
});

as you can guess ... r should NOT equal 'foobar'

What am I doing wrong here?

Upvotes: 1

Views: 1208

Answers (2)

CaffeineAddiction
CaffeineAddiction

Reputation: 823

it('no name', function(done) {

done has to be an argument of the function passed to it()

Upvotes: 2

fmsf
fmsf

Reputation: 37137

When creating async tests with mocha you need to let him know when it is done

describe('an asynch piece of code', function() {
   var foo = new bar();
   it('should call the callback with a result', function( done ) {
       foo.doAsynchStuff( function( result ) {
          result.should.be.ok;
          done();
       });
   });
});

If done is present as an argument on the it then mocha will wait for the done to be called. It has a timeout of 2 seconds, that if exceeded fails the test. You can increase this timeout:

it('should resolve in less than 10 seconds', function( done ) {
   this.timeout( 10000 );
   foo.doAsynchStuff( function( result ) {
      result.should.be.ok;
      done();
   });
}

Upvotes: 4

Related Questions