2013-08-04 21 views
5

Sto provando a simulare la funzione fs.readdir per i miei test.Mock fs.readdir per il test

All'inizio ho provato a utilizzare sinon perché questo è un ottimo framework per questo, ma non ha funzionato.

stub(fs, 'readdir').yieldsTo('callback', { error: null, files: ['index.md', 'page1.md', 'page2.md'] }); 

Il mio secondo tentativo era di prendere in giro la funzione con una funzione auto-sostituita. Ma anche non funziona.

beforeEach(function() { 
    original = fs.readdir; 

    fs.readdir = function (path, callback) { 
    callback(null, ['/content/index.md', '/content/page1.md', '/content/page2.md']); 
    }; 
}); 

afterEach(function() { 
    fs.readdir = original; 
}); 

Qualcuno può dirmi perché entrambi non funziona? Grazie!


Update - Questa, inoltre, non funziona:

sandbox.stub(fs, 'readdir', function (path, callback) { 
    callback(null, ['index.md', 'page1.md', 'page2.md']); 
    }); 

Update2:

Il mio ultimo tentativo di prendere in giro la funzione readdir sta lavorando, quando sto cercando di chiamare questo funzione direttamente nel mio test. Ma non quando sto chiamando la funzione derisoria in un altro modulo.

risposta

6

Ho trovato il motivo del mio problema. Ho creato il mock nella mia classe di test provato a testare la mia pausa con supertest. Il problema era che il test è stato eseguito in un altro processo come il processo in cui viene eseguito il mio server web. Ho creato l'Express-App nella mia classe di test e il test è ora verde.

questo è prova

describe('When user wants to list all existing pages', function() { 
    var sandbox; 
    var app = express(); 

    beforeEach(function (done) { 
     sandbox = sinon.sandbox.create(); 

     app.get('/api/pages', pagesRoute); 
     done(); 
    }); 

    afterEach(function (done) { 
     sandbox.restore(); 
     done(); 
    }); 

    it('should return a list of the pages with their titles except the index page', function (done) { 
     sandbox.stub(fs, 'readdir', function (path, callback) { 
     callback(null, ['index.md', 'page1.md', 'page2.md']); 
     }); 

     request(app).get('/api/pages') 
     .expect('Content-Type', "application/json") 
     .expect(200) 
     .end(function (err, res) { 
      if (err) { 
      return done(err); 
      } 

      var pages = res.body; 

      should.exists(pages); 

      pages.length.should.equal(2); 

      done(); 
     }); 
    }); 
});