Где я могу использовать Pretender, чтобы включить интеграционные тесты Ember Qunit с rails-csrf?

Мы используем rails-csrf в нашем приложении ember-cli. README на rails-csrf говорит:

Обязательно имитируйте вызов конечной точки csrf-сервера. В противном случае ваши тесты не пройдут с

"error while processing route: [route]"

сообщения в консоли браузера. Например:

server = new Pretender(function() {
  this.get('/csrf', function(request) {
    return [200, {"Content-Type": "application/json"},
      JSON.stringify({
        "authenticity_token": "token"
      })
    ];
  });
});

Я понимаю проблему здесь (наши интеграционные тесты действительно показывают эту ошибку), и я понимаю, как Pretender решает ее . У меня установлен Pretender с помощью ember-cli-pretender.

Я не понимаю, как убедиться, что этот фрагмент кода - конфигурация для имитации Pretender - работает. Я установил его в блоке setup модуля тестирования интеграции, и он вызывается, но ошибка все еще присутствует, и тесты все еще не проходят.

Вот текущее нерабочее состояние:

module('Integration test', {
  setup: function() {
    App = startApp();

    var server = new Pretender(function() {
      this.get('/our/api/for/csrf', function(request) {
        return [200, {"Content-Type": "application/json"},
          JSON.stringify({
            "authenticity_token": "token" 
            // I've also tried putting a real token from the server here instead of "token"
          })
        ];
      });
    });
  },
  teardown: function() {
    Ember.run(App, App.destroy);
  }
});

Макет вызывается, но того, что он возвращает, явно недостаточно для rails-csrf. Похоже, что вызов beforeModel в маршруте приложения возвращает обещание; неясно, ожидается ли это и решается ли это.

(Этот вопрос внешне похож на этот более старый вопрос, но доступные инструменты для его решения в Ember значительно изменились.)


person pjmorse    schedule 26.02.2015    source источник
comment
Создание экземпляра Pretender внутри setup должно работать, это правильное место для этого. Поищите что-нибудь еще, что может быть не так.   -  person givanse    schedule 26.02.2015
comment
@givanse, это хорошо! Я также исправил фактический URL-адрес, на который мы отправляем CSRF-запрос. Интересно, ссылается ли где-нибудь на эту server var, которой я назначаю экземпляр Pretender? Или это имеет значение?   -  person pjmorse    schedule 26.02.2015
comment
Я убедился, что вызывается mock Pretender. Я думаю, он не возвращает то, что ему нужно вернуть?   -  person pjmorse    schedule 27.02.2015
comment
Можете ли вы настроить jsbin?   -  person givanse    schedule 28.02.2015
comment
Я пытался настроить jsbin несколько раз, но множество ошибок, с которыми я боролся (в основном, настройка среды) просто для того, чтобы добраться до ошибки, которая есть у меня в моем приложении, ужасно. Я сделаю еще один удар, но я не оптимистичен, особенно добавляя rails-csrf в микс.   -  person pjmorse    schedule 02.03.2015
comment
Я также испытываю всплеск обновления версий - мы находимся на ember-cli 0.1.12 и ember 1.8.1, поэтому, возможно, стоит попробовать перейти на 0.1.15 и 1.10.x соответственно, чтобы увидеть, проясняет ли это что-то непонятное .   -  person pjmorse    schedule 02.03.2015
comment
Пока что обновление до ember 1.10.x выглядит многообещающим; по крайней мере, теперь у меня другая ошибка.   -  person pjmorse    schedule 03.03.2015


Ответы (1)


Я обновил наше приложение с ember-cli 0.1.12 и ember 1.8.1 до ember-cli 0.2.0 и ember 1.10.0. Я также обновил Pretender до версии 0.6.0 (пакет ember-cli-pretender установлен 0.1.0). Сам по себе это ничего не решило, но привело к заметным изменениям в том, как интеграция тест не удался. Теперь Pretender перехватывал запросы данных и возвращал ошибку, потому что я не определил для них обработчики.

Ошибка: Pretender перехватил GET / our / api / data /: id, но для этого типа запроса не был определен обработчик

Таким образом, проблема заключалась не в Ember, а в моей конфигурации Pretender. Как только я смоделировал запросы данных к API, мы заработали.

tl; dr убедитесь, что у вас установлена ​​последняя версия Pretender.

person pjmorse    schedule 04.03.2015