Как я могу протестировать Trigger.io API встроенного модуля Android с параметром int?

#parameters #trigger.io #native-methods

#параметры #trigger.io #native-методы

Вопрос:

Я пишу собственный модуль Android для Trigger.io . Этот метод определен в API.java .

 public static void foo(final ForgeTask task, @ForgeParam("bar") final int bar) {
    System.out.println("foo called " task.params);
    task.success();
}
  

Когда я запускаю инспектор и ввожу 5 в текстовое поле for bar , я вижу следующий вывод.

Called "test_test.foo" with "{"bar":"5"}"

Error for "test_test.foo" with "{"message":"Parameter 'bar' was of the wrong type, expected an int","type":"UNEXPECTED_FAILURE","subtype":null}"

Я получаю аналогичные ошибки, если bar объявлено как long или double . Однако аналогичный API iOS работает нормально.

Как я могу протестировать этот метод в инспекторе Android?

Редактировать: я использую Trigger platform версии v2.1.7 (последняя версия на момент написания).

Ответ №1:

Похоже, что он отправляет 5 в виде строки, когда ваша функция ищет int.. Если триггер будет отправлять его только в виде строки, вы можете захотеть изменить int на string и преобразовать строку в int постфактум. Не лучшее решение, но я думаю, что это сработает, если trigger.io не дает вам возможности отправлять данные в виде int

Ответ №2:

Это связано с тем, что ввод текста html содержит строку и что эта строка никогда не анализируется в int .

Вариант 1

Вы можете исправить ForgeInspector/assets/src/js/inspector.js . Изменить:

 $('#_run').click(function () {
    var module = $('#_module').val();
    var method = $('#_method').val();
    var params = {};

    $('.api_input input').each(function (i, x) {
        params[$(x).attr('id')] = $(x).val();
    });

    $('#_output').prepend('<pre class="alert alert-info">Called "' module '.' method '" with "' JSON.stringify(params, null, '') '"</pre>');
    forge.internal.call(module '.' method, params, function () {
        $('#_output').prepend('<pre class="alert alert-success">Success for "' module '.' method '" with "' JSON.stringify(arguments[0], null, '') '"</pre>');
    }, function () {
        $('#_output').prepend('<pre class="alert alert-error">Error for "' module '.' method '" with "' JSON.stringify(arguments[0], null, '') '"</pre>');
    })
});
  

Для

 $('#_run').click(function () {
    var module = $('#_module').val();
    var method = $('#_method').val();
    var paramTypes = modules[module][method];
    var params = {};

    $('.api_input input').each(function (i, x) {
        switch (paramTypes[$(x).attr('id')].type) {
            case 'int': params[$(x).attr('id')] = parseInt($(x).val()); break;
            case 'long': params[$(x).attr('id')] = parseInt($(x).val()); break;
            case 'double': params[$(x).attr('id')] = parseFloat($(x).val()); break;
            default: params[$(x).attr('id')] = $(x).val();
        }
    });

    $('#_output').prepend('<pre class="alert alert-info">Called "' module '.' method '" with "' JSON.stringify(params, null, '') '"</pre>');
    forge.internal.call(module '.' method, params, function () {
        $('#_output').prepend('<pre class="alert alert-success">Success for "' module '.' method '" with "' JSON.stringify(arguments[0], null, '') '"</pre>');
    }, function () {
        $('#_output').prepend('<pre class="alert alert-error">Error for "' module '.' method '" with "' JSON.stringify(arguments[0], null, '') '"</pre>');
    })
});
  

Это преобразует значения в правильные типы.

Вариант 2

Вы также можете написать автоматический или интерактивный тест для проверки вашего метода API.

Ответ №3:

На данный момент я определил метод без параметров foo5 , который вызывает foo .

 public static void foo5(final ForgeTask task) {
    API.foo(task, 5);
}