2017-04-24 20 views
1

我寫的用玩笑我的機器人的考驗,我有以下代碼:調用而processMessage()從bot.on(「發送」)

let bot; 
let conn; 
let index = 0; 
let responses = []; 
let expectedResponses = []; 

beforeEach(() => { 
    let connector = new builder.ConsoleConnector(); 
    bot = new builder.UniversalBot(connector); 
    conn = connector; 
}); 

test('test case 1 jeff',() => { 
    bot.library(require('../dialogs/inputRecognizer').createLibrary()); 
    // the main dialog "/" should start "inputRecognizer:/" 
    // as it can be seen [https://github.com/Microsoft/BotBuilder/blob/858aad96cdd1fabbf7f9a29ee797eb03111d7cba/Node/core/tests/Dialogs.js][1] the code below seems to be identical to the one shown in examples 
    bot.dialog('/', [ 
     (session) => { 
      session.beginDialog('inputRecognizer:/'); 
     } 
    ]); 

    basicMessages.forEach(o => {if (o.in) {expectedResponses.push(o.in)}}); 

    bot.on('send', function (message) { 
     responses.push(message.text); 
     index++; 
     if (index < testMessages.length) { 
      conn.processMessage(basicMessages[index].out); 
     } else { 
      expect(responses).toEqual(expectedResponses); 
     } 
    }); 

    conn.processMessage(basicMessages[0].out); 
}); 

的代碼運行正常,我的所有郵件投入連接器。但是,第二條消息被視爲一個新對話框,以下所有消息都將被視爲新對話框。所以我得到的是對話開始一遍又一遍。

我查看了GitHub上的BotFramework測試,看起來他們使用了類似的方法(觸發'send'事件處理程序之外的第一個processMessage,並從處理程序中調用下一個)。

如何讓processMessage每次都不重啓我的對話框?我認爲這是我的對話的問題,也許?

我的對話框代碼( 「inputRecognizer:/」):

lib.dialog('/', [ 
    function (session) { 
     // it always executes this part 
     builder.Prompts.text(session, 
      `Please type your inquiry!`); 
    }, 
    (session, result) => { 
     if (result.response) { 
      // and it never gets to here 

編輯:basicMessages是這樣的:

module.exports = [ 
    { 
     out: 'hi', 
     in: 'Please type your inquiry!', 
    }, 
    { 
     out: 'aaa', 
     in: 'Please type your inquiry!' 
    }, 
    { 
     out: 'aaa', 
     in: 'Please type your inquiry!' 
    }, 
    { 
     out: 'aaaa', 
     in: 'Please type your inquiry!' 
    }, 
    { 
     out: 'aa', 
     in: 'Please type your inquiry!' 
    } 
]; 
+0

我對你發佈的代碼感到困惑。我看到一個正在測試的'/'對話框,然後用兩步瀑布顯示另一個瀑布,你說沒有達到第二步。你可以分享你的完整測試用例嗎? –

+0

第一個對話框調用'inputRecognizer:/'對話框。第二塊代碼是inputRecognizer對話框本身。 – faso

+0

「basicMessages」中有什麼? –

回答

2

看來你basicMessages是錯誤的:你expectedResponses數組類似:

["Please type your inquiry!", "Please type your inquiry!", "Please type your inquiry!", "Please type your inquiry!", "Please type your inquiry!"] 

我不認爲它是你的預期正在將messages.Text添加到您稍後用於聲明的responses列表中。

而且,你不需要createLibrary();

你可以使用bot.library(require('../dialogs/inputRecognizer'));

我重建項目(GitHub)和代碼後到達的提示就好了瀑布。

+0

這對您有幫助嗎? –

+0

basicMessages是正確的,他們只是驗證它不工作,而不是工作。但是,當我克隆你的代碼時,它工作得很好。我從我的代碼中刪除了createLibrary(),它似乎沒有幫助。 – faso

+0

每次向對話框發送消息時,它仍然從頂部開始瀑布。 – faso

相關問題