Набор тестов для умного дома проходит не с одним действием, а с другим с точно таким же кодом - PullRequest
1 голос
/ 18 июня 2020

мы разработали действие умного дома для Google Assistant, и наше «действие постановки» прошло набор тестов для умного дома. Теперь, когда мы хотели сертифицировать «производственное действие», набор тестов не прошел, ни одна команда не сработала. Состояния устройств изменились правильно, но набор тестов вернул следующую ошибку: AssertionError: ожидаемое состояние, которое будет включать: {"on": true}, фактическое состояние: {}: ожидается, что false будет истинным

У нас уже была проблема с «промежуточным действием», и мы определили, что это проблема HomeGraph Syn c. Мы исправили это, и потом все заработало. Код «производственного действия» такой же, как и «постановочного действия», и настройки также такие же. Итак, мы понятия не имеем, что можно сделать, чтобы пройти набор тестов. Кто-нибудь знает, в чем может быть проблема?

Вот отрывок из нашего кода:

const { smarthome } = require('actions-on-google');

// creating app in constructor
this._app = smarthome({ jwt, debug: this._options.debug || false });


// code-snipped sending state to HomeGraph after creating the state object from our device states
console.info('Report state:');
console.info(inspect(state, {depth: null, showHidden: false}));

this._app.reportState(state)
.then(res => console.info('report state succeeded', res))
.catch(err => console.error('report state failed', err));

И вот соответствующий журнал:

Report state:
{
  requestId: 'c82c0c20-a10d-4ded-a456-319109188501',
  agentUserId: '730f1842168ade4dcf9be3e40ea279e7ac4e6f21c002c09909f9d9a0341d2214',
  payload: {
    devices: {
      states: {
        '500dc011398fd3c191efdfa8e13a1062f7ef4d1c': { on: true, online: true }
      }
    }
  }
}
report state succeeded {
  "requestId": "c82c0c20-a10d-4ded-a456-319109188501"
}

В случае ошибки мы ожидаем что-то вроде:

  • 404: agentUserId unknown или HomeGraph не включен
  • 401: неправильно настроены права доступа
  • или любая другая ошибка

, но это удается.

EDITED:

Мы скорректировали наш код, прочитав состояние из HomeGraph сразу после его отправки в HomeGraph, чтобы увидеть, получает ли HomeGraph что-нибудь от нас вообще:

    const auth = new google.auth.GoogleAuth({
      credentials: jwt,
      scopes: ['https://www.googleapis.com/auth/homegraph']
    });

    this._hg = google.homegraph({
      version: 'v1',
      auth: auth,
    });

    this._app = smarthome({ jwt, debug: this._options.debug || false });


this._app.reportState(state).then(async res => {

      const request = {
        requestBody: {
          agentUserId: state.agentUserId,
          inputs: [{
            payload: {
              devices: Object.keys(state.payload.devices.states).map(id => ({id}))
            }
          }]
        }
      };

      console.info(require('util').inspect(request, {depth: null}));

      const readStates = await this._hg.devices.query(request);
      console.info('########## STATES in HOMEGRAPH #######################');
      console.info(readStates.data);
      return res;
    })
.catch(err => console.error('report state failed', err));

Состояние пусто.

Мы также реализовали простое приложение node.js для чтения всех состояний устройства через HomeGraph API. Все состояния устройства пусты в любое время.

Главный вопрос: почему вызов this._app.reportState (state) никогда не запускается в обработчике catch? Должно быть что-то не так с нашей отправкой состояния в HomeGraph, но мы не возвращаем никаких ошибок ...?

Ответы [ 2 ]

1 голос
/ 23 июня 2020

Спасибо! Проблема как-то разобралась. Возможно, в Google есть ошибка, но без каких-либо действий с нашей стороны тесты проходят.

0 голосов
/ 18 июня 2020

Если вы получаете {} в качестве фактического значения состояния, то кажется, что Test Suite не может считывать данные из Home Graph. Для этого есть две вероятные причины.

  • В вашем производственном проекте ваша тестовая учетная запись имеет другой agentUserId
  • У вашего производственного проекта будет другой ключ учетной записи службы, чем у вашего промежуточного проекта. Возможно, вы загружаете неправильный ключ, из-за чего вызовы API Home Graph в наборе тестов не выполняются.
...