2017-02-21 40 views
0

У нас есть приложение, которое использовало Pretender для обеспечения светильников для испытаний. Теперь мы пытаемся перейти на ember-cli-mirage. Мы не можем перенести все приборы сразу. Так что в основном происходит то, что мы начинаем собственный сервер Pretender, и ember-cli-mirage начинает свою работу. Whic выдает следующее предупреждение:ember-cli-mirage в устаревшем приложении

Вы создали второй экземпляр Претендента, когда был уже запущен. Запуск двух серверов Pretender сразу приведет к неожиданным результатам и будет полностью удалено в будущей основной версии. Пожалуйста, вызовите .shutdown() в своих экземплярах, когда вам больше не нужно их отвечать.

Поскольку это всего лишь предупреждение, это не должно быть проблемой для переходного периода. Проблема в том, что когда Mirage загружается в наше приложение, старые пути Pretender перестают отвечать. Наверное, это то, о чем «... приведет к неожиданным результатам».

Есть ли шанс запустить ember-cli-mirage вместе с вручную созданными маршрутами Pretender? Или просто использовать сервер Mirage и вводить туда эти маршруты?

ответ

1

Я бы использовал сервер Mirage, а затем загрузил маршруты Pretender внутри него. (Сервер Mirage - это просто объект, который new с экземпляром Pretender). Если люди видят папку mirage, они, вероятно, ожидают, что маршруты будут определены там. Кроме того, Mirage очищает экземпляр Pretender во время тестирования.

В mirage/config.js вы можете импортировать существующие маршруты Претендентов и называть их там. Mirage имеет сахар на вершине Самозванца, но вы всегда можете получить доступ к основному экземпляру претендента через this.pretender в config функции:

// mirage/config.js 
import setupYourOldRoutes from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    setupYourOldRoutes(this.pretender); 
} 

Так setupYourOldRoutes может быть функцией, которая принимает экземпляр претендента, а затем определяет все существующие обработчик маршрута с использованием Это.

+0

Спасибо! Подтолкнуло меня к правильному направлению. –

0

На основании ответа @samselikoff я нашел решение для своего дела. У нас уже есть один центральный пункт, который обрабатывает создание экземпляра претендента. Таким образом, исправление было просто передать Самозванца мираж вместо создания нового:

// somewhere.js 
export default function() { 
    // initPretender: function() { 
    // this.pretender = new Pretender(); 
    // } 
    initPretender: function (pretender) { 
    this.pretender = pretender; 
    }, 
    getPretender: function() { 
    return this.pretender; 
    } 
} 

// mirage/config.js 
import pretenderWrapper from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    pretenderWrapper.initPretender(this.pretender); 
} 

Tricky часть должна была убедиться, что initPretender() называется до того любого нашего унаследованного кода пытается вызвать getPretender(). I думаю обычно это не проблема. В нашем случае мы исправили tests/helpers/start-app.js, чтобы в каждом тесте были введены некоторые приборы. И это вызвало вызов getPretender() слишком рано.

+0

Довольно специфическое решение, которое связано с конкретными проблемами. Проводка здесь, если у кого-то есть подобные проблемы. –