2016-04-20 7 views
0

Ich arbeite an einer MEAN-Stack-Anwendung (unter Verwendung eines Tutorials zur Anleitung) und habe ein Problem mit einem meiner Tests festgestellt. Wenn ich den unteren Mokkastest mache, läuft die Zeit ab. Ich habe versucht, den Timer zu verlängern, aber ohne Erfolg. Ich habe einen anderen Test, der fast identisch ist, aber für eine andere Route. Ich überprüfte meine API-Datei, um sicherzustellen, dass ich die richtigen URLs habe. Ich bin mir nicht sicher, was hier passiert.Mokkentest läuft auf MEAN-Stack ab

  • express v4.12.3
  • Mokka v2.2.4
  • Schluck-Mokka v2.0.1
  • Superagent v1.2.0
  • gulp v3.9.0
  • Knoten V5.1.0

Der Code lautet:

describe('Transaction API', function() { 
    it('can load a transaction by id', function(done) { 
     // Create a single transaction 
     var TRANSACTION_ID = '001'; 
     var transaction = { 
      name: 'LG2 G4', 
      _id: TRANSACTION_ID, 
      amount: 300 
     }; 

     Transaction.create(transaction, function(error, doc) { 
      assert.ifError(error); 
      var url = URL_ROOT + '/transactions/id/' + TRANSACTION_ID; 
      superagent.get(url, function(error, res) { 
       assert.ifError(error); 
       var result; 
       // And make sure we got the LG G4 back 
       assert.doesNotThrow(function() { 
        result = JSON.parse(res.text); 
       }); 

       assert.ok(result.transaction); 
       assert.equal(result.transaction._id, TRANSACTION_ID); 
       assert.equal(result.transaction.name, 'LG2 G4'); 
       done(); 
      }); 
     }); 
    }); 
}); 

Hier ist meine Route in app.js

api.get('/transactions/id/:id', wagner.invoke(function(Transactions) { 
     return function(req, res) { 
     Transactions.findOne({ _id: req.params.id }, 
     handleOne.bind(null, 'transactions', res)); 
     }; 
})); 

function handleOne(property, res, error, result) { 
if (error) { 
    return res. 
     status(status.INTERNAL_SERVER_ERROR). 
     json({ error: error.toString() }); 
} 

if (!result) { 
     return res. 
     status(status.NOT_FOUND). 
     json({ error: 'Not found' }); 
} 

var json = {}; 
json[property] = result; 
res.json(json); 
} 

Aus irgendeinem Grund dies ganz gut funktioniert.

api.get('/category/id/:id', wagner.invoke(function(Category) { 
    return function(req, res) { 
     Category.findOne({ _id: req.params.id }, 
     handleOne.bind(null, 'category', res)); 
     }; 
})); 
+0

können Sie überprüfen, ob Ihr Rückruf an "superagent.get" aufgerufen wird? Versuchen Sie, etwas im Callback zu protokollieren. –

+0

@DeendayalGarg Ich bekomme diese '{"Fehler": "CastError: Cast zu ObjectId fehlgeschlagen für Wert \" 001 \ "bei Pfad \" _ ID \ ""} " – Alex

+0

Ja, müssen Sie die Objekt-ID in den Transaktionen übergeben. findOne'. Da '_id' vom Typ ObjectId ist. Sie müssen 'req.params.id' in ObjectId konvertieren. –

Antwort

0

Sieht aus wie der Fehler in meinem Transaktionsmodell war. In der Kategorie Modell hatte ich identifiziert

_id : { 
    type : String 
}, 

Aber hatte nicht das gleiche im transactionSchema getan.