AssertionError при тестировании скрипта Hubot с помощью hubot-test-helper и chai - PullRequest
2 голосов
/ 07 мая 2019

Я пишу простой тест для моего Hubot (который действует как бот Slack), чтобы проверить, что мой бот отправляет ответ в ответ на триггеры. Я следовал примеру, показанному в документах , но результаты теста - AssertionError (подробности ниже), и я не уверен, почему. Любой совет будет принята с благодарностью.

Я предполагаю, что проблема связана с тестом, а не со сценарием (break-start.coffee), поскольку при тестировании сценария я получил правильный ответ, отправив фактическое сообщение боту из Slack.

# break-start.coffee
# Basically, the bot says "Later alligator" to any user going on lunch break.

module.exports = (robot) ->
  robot.respond /off to lunch/i, (res) ->
    res.reply('Later alligator')
# break-start-test.coffee

'use strict'

Helper = require('hubot-test-helper')
helper = new Helper('../scripts/break-start.coffee')
request = require('request')
expect = require('chai').expect

describe 'bot responds to user message', ->
  beforeEach ->
    # Set up the room before running the test.
    @room = helper.createRoom()

  afterEach ->
    # Tear it down after the test to free up the listener.
    @room.destroy()

  it 'responds to users who are off to lunch', ->
    @room.user.say('bob', '@hubot Off to lunch').then =>
    expect(@room.messages).to.eql [
        ['bob', '@hubot Off to lunch']
        ['hubot', '@bob Later alligator']
      ]

# The error message

AssertionError: expected [ [ 'bob', '@hubot Off to lunch' ] ] to deeply equal [ Array(2) ]
      + expected - actual

         [
           "bob"
           "@hubot Off to lunch"
         ]
      +  [
      +    "hubot"
      +    "@bob Later alligator"
      +  ]
       ]

Между прочим, ранее был очень похожий вопрос , но он остался без ответа.

1 Ответ

1 голос
/ 07 мая 2019

Я думаю, что проблема в ошибке отступа.

Вызову @room.user.say передается пустая функция в качестве разрешения обещания, а не ожидаемого блока, так как это должно иметь отступ другого уровня.

Это соответствует тому, что в комнате находится только одно сообщение, так как вызов expect был выполнен до выполнения асинхронного @room.user.say():

it 'responds to users who are off to lunch', ->
  @room.user.say('bob', '@hubot Off to lunch').then =>
    expect(@room.messages).to.eql [
      ['bob', '@hubot Off to lunch']
      ['hubot', '@bob Later alligator']
    ]
...