2013-02-19 3 views
1

첫 번째 실행에서는 정상적으로 통과하는 모카 테스트가 있지만 변경 사항이 적용되고 모카가 두 번째 테스트를 다시 실행하면 --watch 플래그 사용) 실패합니다. 내 시험 :Mocha 테스트를 시청할 때 실패 함 ("after all": done() 여러 번 호출 됨)

var mongoose = require('mongoose') 
    , chai = require('chai') 
    , request = require('supertest') 
    , _ = require('underscore') 
    , app = require('../../app').boot('testing') 
    , Link = mongoose.model('Link') 
    , should = chai.should() 

request = request(app) 

describe('Links resource', function() { 

    var userId = '512298b46271845564000002' 
    , linkId 
    , sampleLink = { 
     'uri': 'http://1.com/', 
     'meta': { 
      'title': 'Link 1', 
      'desc': 'Lorem ipsum' 
     }, 
     'shares': [{ 
      'uid': userId, 
      'date': new Date(), 
      'message': 'Lorem ipsum' 
     }] 
     } 

    before(function (done) { 
    mongoose.connection.on('open', done) 
    }) 

    after(function (done) { 
    Link.remove(function() { 
     mongoose.connection.close(done) 
    }) 
    }) 

    it('POST /api/links', function (done) { 
    request.post('/api/links') 
     .send(sampleLink) 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.have.property('_id') 

     linkId = res.body._id 

     done() 
     }) 
    }) 

    it('GET /api/links/:id', function (done) { 
    request.get('/api/links/' + linkId) 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.have.property('uri', sampleLink.uri) 

     done() 
     }) 
    }) 

    it('GET /api/links', function (done) { 
    request.get('/api/links') 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.have.lengthOf(1) 

     done() 
     }) 
    }) 

    it('PATCH /api/links/:id', function (done) { 
    request.patch('/api/links/' + linkId) 
     .send({ 'uri': 'http://2.com/' }) 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.have.property('_id') 
     res.body.should.have.property('uri', 'http://2.com/') 

     done() 
     }) 
    }) 

    it('PUT /api/links/:id', function (done) { 
    request.put('/api/links/' + linkId) 
     .send(_(sampleLink).extend({ 'uri': 'http://3.com/' })) 
     .expect('Content-Type', /json/) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.have.property('_id') 
     res.body.should.have.property('uri', 'http://3.com/') 

     done() 
     }) 
    }) 

    it('DELETE /api/links', function (done) { 
    request.del('/api/links/' + linkId) 
     .expect(200) 
     .end(function (err, res) { 
     if (err) done(err) 

     res.body.should.be.empty 

     done() 
     }) 
    }) 

}) 

오류 (들) :

Links resource 
    1) "after all" hook 

    ✖ 1 of 6 tests failed: 

    1) Links resource "after all" hook: 
    Error: done() called multiple times 
     at multiple (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:177:31) 
     at done (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:183:26) 
     at NativeConnection.Runnable.run.duration (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:199:9) 
     at NativeConnection.EventEmitter.emit (events.js:126:20) 
     at open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:431:10) 
     at NativeConnection.Connection.onOpen (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:439:5) 
     at Connection._open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:399:10) 
     at NativeConnection.doOpen (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:48:5) 
     at Db.open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:230:14) 
     at Server.connect.connectCallback (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:333:7) 
     at g (events.js:192:14) 
     at EventEmitter.emit (events.js:126:20) 
     at Server.Base._callHandler (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:130:25) 
     at Server.connect.connectionPool.on.server._serverState (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:517:20) 
     at MongoReply.parseBody (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:127:5) 
     at Server.connect.connectionPool.on.server._serverState (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:476:22) 
     at EventEmitter.emit (events.js:96:17) 
     at _connect (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:175:13) 
     at EventEmitter.emit (events.js:99:17) 
     at Socket.exports.Connection.createDataHandler (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:372:22) 
     at Socket.EventEmitter.emit (events.js:96:17) 
     at TCP.onread (net.js:397:14) 


    1) "before all" hook 

    ✖ 1 of 6 tests failed: 

    1) Links resource "before all" hook: 
    Error: done() called multiple times 
     at multiple (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:177:31) 
     at done (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:183:26) 
     at NativeConnection.Runnable.run.duration (/usr/local/share/npm/lib/node_modules/mocha/lib/runnable.js:199:9) 
     at NativeConnection.EventEmitter.emit (events.js:126:20) 
     at open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:431:10) 
     at NativeConnection.Connection.onOpen (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:439:5) 
     at Connection._open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/connection.js:399:10) 
     at NativeConnection.doOpen (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:48:5) 
     at Db.open (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:230:14) 
     at Server.connect.connectCallback (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:333:7) 
     at g (events.js:192:14) 
     at EventEmitter.emit (events.js:126:20) 
     at Server.Base._callHandler (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:130:25) 
     at Server.connect.connectionPool.on.server._serverState (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:517:20) 
     at MongoReply.parseBody (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:127:5) 
     at Server.connect.connectionPool.on.server._serverState (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:476:22) 
     at EventEmitter.emit (events.js:96:17) 
     at _connect (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:175:13) 
     at EventEmitter.emit (events.js:99:17) 
     at Socket.exports.Connection.createDataHandler (/Users/Oliver/Development/Personal/Reader/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:372:22) 
     at Socket.EventEmitter.emit (events.js:96:17) 
     at TCP.onread (net.js:397:14) 

답변

0

나는 몇 가지 간단한 테스트 케이스와 함께이 재현하려고하지만 난

이을 (3.5.5 몽구스) 없습니다 아마도 원인보다는 효과를 고치고있을 것입니다.하지만 아마 컬렉션을 직접 삭제하면 효과가 있습니까? 보기의 예 : another SO answer :

after(function (done) { 
    mongoose.connection.collections['links'].drop(); 
    mongoose.connection.close(done); 
    });