2013-08-04 13 views
5

Próbuję wyśmiać funkcję fs.readdir dla moich testów.Mock fs.readdir do testowania

Najpierw próbowałem użyć sinon, ponieważ jest to bardzo dobre ramy, ale nie zadziałało.

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

Moja druga próba polegała na wyśmiewaniu funkcji za pomocą funkcji samoczynnej wymiany. Ale to też nie działa.

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; 
}); 

Czy ktoś może mi powiedzieć, dlaczego oba nie działają? Dzięki!


Update - To nie ma również utwory:

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

Update2:

Moja ostatnia próba drwić funkcję readdir działa, gdy próbuję to nazwać działa bezpośrednio w moim teście. Ale nie wtedy, gdy wywołuję wyśmiewaną funkcję w innym module.

Odpowiedz

6

Znalazłem przyczynę mojego problemu. Stworzyłem próbę w mojej klasie testowej, próbowałem przetestować mój api z reszta z supertest. Problem polegał na tym, że test został wykonany w innym procesie jako proces, w którym działa mój serwer WWW. Stworzyłem ekspresową aplikację w mojej klasie testowej, a test jest teraz zielony.

to badanie

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(); 
     }); 
    }); 
});