文章做者:Maxime Khoygit
原文連接:Writing integration tests for a Botfuel Dialog chatbotgithub
編譯:一熊翻譯組 Masonnpm
前言:由於 Botfuel Dialog 聊天機器人是一個網絡應用,你能夠依靠它強大的編程功能,例如單元與集成測試,來測試你的機器人。編程
在這篇教程中你能夠學習如何使用 Jest 來測試你的聊天機器人,它是一個由 Facebook 開發的測試庫。不過,你也可使用其它測試庫,例如 Mocha。json
至於這篇教程的目標,是讓你學習如何將機器人的手動測試自動化,以確保聊天機器人如期工做。bash
對於這篇教程,咱們會從簡單的樣例機器人開始。請確保你已按照入門教程運行直至安裝部分。網絡
舉個例子,初始的樣例機器人會有以下的行爲:async
讓咱們來寫一個測試來確保這一簡單功能的運轉。學習
首先,咱們須要安裝 Jest 做開發基礎:測試
npm install --dev jest
一旦 Jest 安裝完成,添加以下test
腳本到你的package.json
文件:
"scripts": {
"start": "botfuel-run",
"train": "botfuel-train",
"test": "jest"
},
複製代碼
你能夠經過npm test
來運行 Jest。
爲了在測試模式下運行聊天機器人,咱們須要一個配置文件指出咱們將用到的test
適配器。用以下內容在根級別建立一個test-config.js
文件:
module.exports = {
adapter: 'test',
};
複製代碼
爲了模擬人與機器人之間的對話,咱們會使用Bot
的play
方法。這種方法須要一組用戶消息,其能夠表明全部用戶會發給聊天機器人的全部消息。對於用戶來講,它多是如下幾種類型:
PostbackMessage
(回執消息)UserImageMessage
(用戶圖片消息)UserTextMessage
(用戶文本消息)在咱們的樣例中,他們都是些簡單的UserTextMessage
。
舉個例子,模擬這段對話:
咱們會編寫:
const bot = new Bot(config);
const userId = bot.adapter.userId;
await bot.play([
new UserTextMessage('Hello'),
new UserTextMessage('My name is Bob'),
]);
複製代碼
用戶與機器人被捕捉的輸出消息被儲存進bot.adapter.log
,因此咱們能夠編寫如下程序來測試機器人是否如期響應:
expect(bot.adapter.log)
.toEqual([
new UserTextMessage('Hello'),
new BotTextMessage('Hello human!'),
new UserTextMessage('My name is Bob'),
new BotTextMessage('Nice to meet you Bob!'),
]
.map(msg => msg.toJson(userId))
);
複製代碼
比較指望的與實際的輸出,咱們提供方便的toJson
方法以便消息能夠相比作原生的 JSON。這種方法須要userId
做爲一個參數,由於每一個UserTextMessage
均可以轉化爲 JSON 的形式,並以消息做者的分類儲存在userId
下。
這裏,你一樣也可使用所有的消息類型。
讓咱們來寫一下完整的測試樣例吧!
在聊天機器人的跟級別構建一個tests
庫並在其中用以下內容建立一個hello.test.js
文件:
const { Bot, BotTextMessage, UserTextMessage } = require('botfuel-dialog');
const config = require('../test-config');
test('answers greeting and name', async () => {
const bot = new Bot(config);
const userId = bot.adapter.userId;
await bot.play([new UserTextMessage('Hello'), new UserTextMessage('My name is Bob')]);
expect(bot.adapter.log).toEqual(
[
new UserTextMessage('Hello'),
new BotTextMessage('Hello human!'),
new UserTextMessage('My name is Bob'),
new BotTextMessage('Nice to meet you Bob!'),
].map(msg => msg.toJson(userId)),
);
});
複製代碼
運行測試前,先執行如下命令:
BOTFUEL_APP_TOKEN=<the BOTFUEL_APP_TOKEN> BOTFUEL_APP_ID=<the BOTFUEL_APP_ID> BOTFUEL_APP_KEY=<the BOTFUEL_APP_KEY> npm test
這裏須要你的應用證書由於你的聊天機器人會調用 NLP API。
你會看到以下結果:
到此爲止,恭喜你,你已經成功地將一個聊天機器人的測試樣例自動化!
一熊翻譯組隸屬於一熊科技,咱們不生產科技雜文,咱們只是 GFW 上語種間的搬運工,歡迎點擊「一熊翻譯組」來加入咱們。主線產品「倍洽」日前迎來新版本上線,欲體驗智能聊天機器人所帶來的將來氣息,與全新工做體驗的無窮魅力,歡迎點擊「倍洽」,從建立屬於你的第一個團隊開始……