0

foo.js次のようなファイルがあります。

var exec = require('child_process').exec
...
function start(){
  ...
  exec('open -g http://localhost:<port>');  // opens a browser window
}
// EOF

start()関数を呼び出すと、ブラウザ ウィンドウが開くことをテストしたいと思います。理想的には、Sinon を使用してスタブアウトし(自動テスト中に実際にブラウザー ウィンドウを開かexecないようにするため)、それが呼び出されたことをアサートしたいと考えています。私は多くの方法を試しましたが、どれもうまくいきません。たとえば、次のようになります。execfoo_test.js

var subject = require('../lib/foo');

describe('foo', function(){
  describe('start', function(){
    it('opens a browser page to the listening address', function(){
      var stub = sinon.stub(subject, 'exec', function(){
        console.log('stubbed exec called');
      });  // fails with "TypeError: Attempted to wrap undefined property exec as function"
    });
  });
});

どうすればこれを行うことができますか?

4

1 に答える 1

0

これがあなたが探しているものかどうかはわかりませんが、クイック検索が返されました:

https://github.com/arunoda/horaa

基本的に、ライブラリをスタブ化できます。例から:

あなたのコード

//stored in abc.js
exports.welcome = function() {
    var os = require('os');

    if(os.type() == 'linux') {
        return 'this is a linux box';
    } else {
        return 'meka nam linux nemei :)';
    }
};

テスト コード (OS のモックに注意してください)

//stored in test.js
var horaa = require('horaa');
var lib = require('./abc'); // your code
var assert = require('assert');

//do the hijacking
var osHoraa = horaa('os');
osHoraa.hijack('type', function() {
    return 'linux';
});

assert.equal(lib.welcome(), 'this is a linux box');

//restore the method
osHoraa.restore('type');

それが役立つことを願っています。

于 2013-02-20T20:14:51.873 に答える