2013-04-01 3 views
0

async Je suis en train de tester la fonction get:Fonctions de test qui contient des appels

exports.get = function(req, res) { 
    Subscriptions 
    .find(req.params.id) 
    .success(function(subscription) { 
     if (subscription) { 
     res.json({message: "Success"}, 200); 
     } else { 
     res.json({message: "Not found"}, 404); 
     } 
    }) 
    .error(function(error) { 
     res.json({message: "Internal server error"}, 500); 
    }); 
}; 

Plus précisément, je ne suis pas vraiment si elle touche la base de données, je veux seulement tester les scénarios où le succès et les événements d'erreur se produisent. J'utilise sequelize.js comme mon orm pour gérer la base de données. J'ai réussi un test, mais c'est un peu méchant avec le timeout. Existe-t-il une meilleure façon de le faire? Voici le test que je l'ai écrit jusqu'à présent:

var express = require('express') 
    , sinon = require('sinon') 
    , subscription = require('app/controllers/subscriptions') 
    , Subscriptions = require('app/models/subscriptions') 
    ; 

describe('subscription controller', function() { 
    beforeEach(function() { 
    this.mockResponse = sinon.mock(express.response); 
    }); 

    afterEach(function() { 
    this.mockResponse.restore(); 
    }); 

    describe('GET /subscriptions/:id', function() { 
    it('should return a json response', function(done) { 
     var request = { 
     params: { 
      id: 'identifier' 
     } 
     }; 

     var expectedResponse = { 
     subscriptions_uri : "/subscription/identifier" 
     }; 

     this.mockResponse 
     .expects('json') 
     .once() 
     .withArgs(expectedResponse); 

     subscription.get(request, express.response); 
     setTimeout(function() { 
     done(); 
     }, 500); 
    }); 
    }); 
}); 

Répondre

0

j'ai décidé d'utiliser la bibliothèque Supertest, qui a fait tester mon contrôleur incroyablement facile:

var express = require('express') 
    , subscription = require('app/controllers/subscriptions') 
    , request = require('supertest') 
    , app = express() 
    ; 

describe('subscription controller', function() { 
    describe('GET /subscriptions/:id', function() { 
    it('should return a json response', function(done) { 
     var expectedBody = { 
     subscriptions_uri : "/subscription/identifier" 
     }; 

     request(app) 
     .get('/subscriptions/identifier') 
     .set('Accept', 'application/json') 
     .expect('Content-Type', /json/) 
     .expect(expectedBody) 
     .expect(200, done); 
    }); 
    }); 
}); 
Questions connexes