2017-08-21 10 views
1

mochaJSを使用してユニットテストコードを書くときにいくつか問題が発生しています。コードは、上記示し私はテストケースを実行すると、端末は「PLZ(1〜3)から選択:」行示したようNodeJSのユニットテストでユーザ入力を嘲笑する方法は?

//index.js 
var query = require('cli-interact');// helper tools for interacting synchronously with user at command line. 

module.exports = function main() { 
    while (true){ 
    let choice = query.getNumber("plz choice from(1~3):");//waiting for user's input; 
    } 
    if(choice === 3){ 
     console.log("you entered 3"); 
    } 
//...other code 
} 

//test_spec.js 
var chai = require("chai"); 
var sinon = require("sinon"); 
var sinonChai = require("sinon-chai"); 
var expect = chai.expect; 
chai.use(sinonChai); 
var main = require("../index.js"); 
describe("test input ", function(){ 
    sinon.spy(console, 'log'); 

    it("enter 3", function(){ 
     main(); 
     //now the test code block here, I want to automatically input 3,but don't know how. 
     let result = console.log.calledWith("you entered 3") 
     expect(result).to.equal(true); 
    }); 

}); 

:そして、私の入力を待っている私が入力した後にここに私のコードです3を入力し、テストケースが合格になります。

このプロセスを自動化したいのですが、どうすればいいですか?

答えて

1

最初に私は無限ループwhile 'query.getNumber'の必要性を理解していません。

let choice = query.getNumber("plz choice from(1~3):");//waiting for user's 

これを削除すると、いくつかのロボノードモジュールを使用してこれを実現できます。 チェックrobotjs https://www.npmjs.com/package/robotjs

index.js

var query = require('cli-interact'); 
    let main =() => { 
     let choice; 
     while (choice != 3) { 
      choice = query.getNumber("plz choice from(1~3):"); 
      console.log('your choice is : ' + choice); 
      if (choice === 3) { 
       console.log("you entered 3"); 
      } 
     } 
    }; 
    module.exports = main; 

test_spec.js

var chai = require("chai"); 
var sinon = require("sinon"); 
var sinonChai = require("sinon-chai"); 
var expect = chai.expect; 
chai.use(sinonChai); 
var main = require("../index.js"); 
var robot = require("robotjs"); 

var roboInput = (input) => { 
    robot.typeString(input); 
    robot.keyTap("enter"); 
}; 
var roboInputArr = (inputs) => { 
    inputs.forEach(ip =>{ 
     roboInput(ip); 
    }); 
}; 
describe("test input ", function() { 
    sinon.spy(console, 'log'); 
    it("enter 3", function() { 
     roboInputArr([1,2,3]); 
     main(); 
     let result = console.log.calledWith("you entered 3") 
     expect(result).to.equal(true); 
    }); 
}); 
test input 
----------- 
enter 3: 
plz choice from(1~3):1 
your choice is : 1 
plz choice from(1~3):2 
your choice is : 2 
plz choice from(1~3):3 
your choice is : 3 
you entered 3 
Pass 
+0

query.getNumber()モジュールのCLI-相互作用」からAPIであり、 [ここ](https://www.npmjs.com/package/cli-interact)にあり、ユーザーの入力を同時に受け入れます。 –

+0

なぜそれを無限ループ内に入れたいのですか(while(true))?それはループを終了し、ユーザーの入力を求め続ける –

+0

真実は、そこには、ユーザーの入力後に複数の学生がいると仮定して、データベースに学生の成績を追加するようにユーザーに求める複数のオプションがあります学生の成績では、主な機能に戻り、さらに成績を追加するか、プログラムを終了するかを尋ねます(3を選択します)。 –

関連する問題