Не могу решить ответить.Обещание в тесте интеграции QUnit


Я пишу интеграционный тест для моего Эмбера.применение js в QUnit. Перед экзаменом, я хочу, чтобы семя некоторыми тестовыми данными, путем выдачи HTTP-запросы на специальный API-тестирование. Я использую jQuery.post для выдачи запросов POST и использую Ember.RSVP.Promise.cast, чтобы превратить обещание jQuery в обещание RSVP. Однако, похоже, это никогда не разрешится. В приведенном ниже коде он просто висит. Строка "STARTING" печатается, но ни "DONE", ни "FAIL" не печатается.

Я также попытался создать новое обещание RSVP, как описано в разделе "Advanced раздел "Использование" http://emberjs.com/api/classes/Ember.RSVP.Promise.html , безрезультатно (его тоже повесили). Если я не оберну обещание jQuery в обещание RSVP, оно достигнет либо "DONE", либо "FAIL".

Почему RSVP не обещает решить проблему?

function create_teacher() {
  var url = "<%= testing_teacher_path %>";

  return Ember.RSVP.Promise.cast(
    Ember.$.post(
      url,
      {
        user: {
          first_name: "John",
          last_name: "Doe"
          school: "EE3",
          email: "john@doe.com",
          password: "password"
        }
      }
    )
  );
}

module("Teacher Dashboard", {
  setup: function() {
    console.log("STARTING");
    Ember.run(HstryEd, HstryEd.advanceReadiness);
  },
  teardown: function() {
    console.log("TEARING DOWN");
    HstryEd.reset();
  }
});

asyncTest("Login", function() {
  expect(1);

  var teacher = create_teacher();
  teacher.then(function() {
    console.log("DONE");
    ok(true, "done");
    start();
  },
  function() {
    console.log("FAIL");
    ok(false, "fail");
    start();
  });
});
1 3

1 ответ:

Это может быть связано с тем, что Ember runloop отключен в тестовом режиме. Вы проверили ic-ajax? https://github.com/instructure/ic-ajax это дает вам многообещающие запросы jQuery ajax в форме, которая нравится Ember, даже в тестировании. Я ввел его, чтобы решить свои проблемы с Ember runloop в тестировании, и до сих пор имел отличные результаты.

В качестве альтернативы, вы можете попробовать обернуть свой teacher.then(.. в Ember.run.