2013-08-04 24 views
5

Tôi đang cố gắng thử chức năng fs.readdir để kiểm tra.Mock fs.readdir để thử nghiệm

Lúc đầu, tôi đã cố gắng sử dụng sinon vì đây là một khung rất tốt cho việc này, nhưng chưa hoạt động.

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

Nỗ lực thứ hai của tôi là giả lập chức năng bằng chức năng tự thay thế. Nhưng nó cũng không hoạt động.

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

Ai có thể cho tôi biết lý do cả hai không hoạt động? Cảm ơn!


Update - Đây cũng không hoạt động:

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

Update2:

nỗ lực cuối cùng của tôi để thử chức năng readdir đang làm việc, khi tôi đang cố gắng để gọi đây chức năng trực tiếp trong thử nghiệm của tôi. Nhưng không phải khi tôi gọi hàm được mô phỏng trong một mô-đun khác.

Trả lời

6

Tôi đã tìm thấy lý do cho sự cố của mình. Tôi đã tạo mô hình trong lớp thử nghiệm của mình đã cố gắng kiểm tra api còn lại của mình với supertest. Vấn đề là thử nghiệm đã được thực thi trong một tiến trình khác như quá trình mà máy chủ web của tôi chạy. Tôi đã tạo ứng dụng thể hiện trong lớp thử nghiệm của mình và bài kiểm tra giờ đây đã có màu xanh lục.

đây là thử nghiệm

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