2016-03-05 5 views
0

Я использую ember-cli-mirage для приемочных испытаний. В конкретном случае я хотел бы проверить поведение при извлечении данных по медленному соединению.Ввести кратковременные задержки в ember-cli-mirage

В настройке ember-cli-mirage есть timing, который имитирует задержку в ответе. Тем не менее, этот параметр не может быть изменен, чтобы отличаться в конкретном тесте:

// app/mirage/config.js 
this.timing = 400; 

Что-то еще я попытался возвращается обещание на поддельной конечной точке. Через некоторый импорт/экспорт я мог бы контролировать разрешение обещания из своего теста. К сожалению, уголек-кли-мираж, кажется, не признают возвращаемое значение как обещание, и просто передает его обратно к адаптеру: Verbatim

// app/mirage/config.js 
this.get('/StopPoint/Search/:term', (db, request) => { 
    return freezer.run(function() { 
    return db[`stop-point-search-${request.params.term}`][0]; 
    }); 
}); 

// At my test 
freezer.on() 
runTests() 
freezer.off() 

Вопрос: есть ли способ сделать это? Т.е.: контролировать задержку конкретного ответа в ember-cli-mirage?

ответ

2

Несколько мыслей:

  • Вы можете изменить сроки в рамках конкретного теста с помощью server.timing. Сервер должен быть реинсталлирован для каждого теста, поэтому это не повлияет на другие тесты.

    test('for slow behavior', function() { 
        server.timing = 400; 
        // 
    }); 
    
  • Вы также можете переопределить обработчик маршрута в тестах, как показано здесь, в the second example of the Acceptance testing guides. Если вы используете 0.2.0-beta, обработчики маршрутов имеют timing вариант вы можете использовать, чтобы влиять только этот обработчик:

    test('for slow behavior', function() { 
        server.get('/slow-query', (schema, request) => { 
        // 
        return data; 
        }, {timing: 400}; 
    
        visit('/'); 
        // 
        assert(); 
    }); 
    

Я думаю, ваш инстинкт вернуть то, что у вас есть контроль над замерзанием будет идеальным способом испытайте это, в тандеме с чем-то вроде Timecop. Возможно, Mirage может добавить API для этого.

+1

Хм, это работает, но я не уверен, действительно ли это полезно. Из-за того, что цикл цикла подключен, я не могу проверить, что происходит в этот промежуточный период, пока приложение ожидает ответа: -/Конечно, мое понимание цикла запуска отсутствует, поэтому я могу что-то не хватает? – pablobm

+0

Какой код в приложении выполняет сетевой запрос? Модель крюка на маршруте? –

+0

Нет, это в контроллере. Это поисковый запрос, и поисковый запрос сопоставляется с аргументом запроса. – pablobm