无法在QUnit集成测试中解析RSVP.Promise

时间:2014-03-12 15:33:18

标签: ember.js qunit ember-testing

我正在为QUnit中的Ember.js应用程序编写集成测试。在测试之前,我想通过向专用测试API发出HTTP请求来播种一些测试数据。我使用jQuery.post发出POST请求,并使用Ember.RSVP.Promise.cast将jQuery保证转换为RSVP保证。然而,它似乎永远不会解决。在下面的代码中,它只是挂起。打印字符串"STARTING"但不会打印"DONE""FAIL"

我还尝试创建一个新的RSVP Promise,如"高级用法" http://emberjs.com/api/classes/Ember.RSVP.Promise.html的一部分无济于事(它也被绞死)。如果我不将jQuery承诺包装到RSVP承诺中,它确实可以到达"DONE""FAIL"

为什么RSVP Promise没有解决?

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 个答案:

答案 0 :(得分:2)

这可能与在测试模式下禁用的Ember runloop有关。你签出了ic-ajax吗? https://github.com/instructure/ic-ajax它以Ember喜欢的形式为您提供承诺风格的jQuery ajax请求,即使在测试中也是如此。我带它进入测试中解决了我的Ember runloop问题,到目前为止已经取得了很好的效果。

或者,您可以尝试将teacher.then(..包裹在Ember.run