Тестирование интеграции Meteor, конечная точка API отдыха в зеркале скорости с жасмином

Я пытаюсь создать тест для конечной точки API, написанной с помощью метеора. Я использую жасмин и скорость. Он предназначен для работы в рамках одного проекта, поэтому я их использую. Проблема возникает, когда я пытаюсь запустить тест и проверить данные в конечной точке. У меня есть загрузочный набор данных в реплике mongodb, и когда я его отправляю, он не совпадает с тем, который загружается в локальном приложении. Вот пример кода:

Jasmine.onTest(function () {

describe('RestApi.MyMethod', function () {

it('Expects to fail because it lacks of valid parameters', function () { /*but it fails because of the user can't be found in the real app*/
  var response = "";
  var userId = Meteor.users.findOne({"username": "MyUser"})._id;
  try {
    response = Meteor.http.call(
      "POST",
      "http://localhost:3000/api/myMethod",
      {
        data: {
          "userId": 
        },
        timeout: 1000
      }
    );
  } catch(error){
    expect(error.message.indexOf("failed [400]")).toBeGreaterThan(-1);
    expect(error.message.indexOf("Invalid parameters provided")).toBeGreaterThan(-1);
  }

  expect(response).toBe('');

});

});

});

Я думаю, что это должно указывать на остальные API зеркала. Есть ли способ сделать это? Я изменил localhost:3000 на localhost:5000, и это не сработало. Как я могу проверить порт зеркала? Заранее спасибо!


person LuisTensai    schedule 31.03.2015    source источник
comment
Похоже, что параметр порта теперь автоматический и не жестко запрограммирован на 5000. Вы можете настроить порт с помощью переменной окружения JASMINE_SERVER_MIRROR_PORT (в некоторых местах это неправильное имя). Интересно, есть ли способ получить IP-адрес и порт, на котором зеркало выполняет тест во время выполнения.   -  person LuisTensai    schedule 31.03.2015
comment
Что, если вы используете относительный путь в Meteor.http.call?   -  person raddevon    schedule 01.04.2015


Ответы (1)


Используйте Meteor.absoluteUrl вместо жесткого кодирования порта.

В вашем коде сделайте так:

response = Meteor.http.call(
  "POST",
  Meteor.absoluteUrl("api/myMethod"), // this bit has changed.
  {
    data: {
      "userId": 
    },
    timeout: 1000
  }
);

Когда тест запустится, ваше тестовое зеркало будет динамически генерировать абсолютный URL-адрес.

person Sung Cho    schedule 08.07.2015
comment
Спасибо! изменил мои тесты, и это сработало! К сожалению, я не могу проголосовать! - person LuisTensai; 22.07.2015
comment
Это работает в текущей версии Meteor? 1.2.1 - person Scott Stensland; 10.12.2015