2013-08-04 4 views
5

私はこの機能を模擬しようとしていますfs.readdir私のテスト用です。テスト用モックfs.readdir

最初はsinonを使用しようとしましたが、これは非常に良いフレームワークですが、機能していないためです。

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

私の2番目の試みは、機能を自己置換機能でモックすることでした。しかし、それはまた動作しません。

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

誰も私に両方がうまくいかない理由を教えてもらえますか?ありがとう!


アップデート - これはまた、作品はありません:

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

をアップデート2:私はこれを呼び出すためにしようとしているときのreaddir機能をモックする

私の最後の試みは、働いています私のテストで直接機能します。しかし、私が他のモジュールで嘲笑された関数を呼び出しているときはそうではありません。

答えて

6

私は私の問題の理由を見つけました。私は私のテストクラスで模擬を作成して、スーパーテックで残りのAPIをテストしようとしました。問題は、テストが別のプロセスで実行されていて、Webサーバーが実行されているというプロセスでした。私はテストクラスにexpress-appを作成しました。テストは現在グリーンになっています。

これはテスト

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(); 
     }); 
    }); 
}); 
です
関連する問題