代码之家  ›  专栏  ›  技术社区  ›  yorbro

无法解决RSVP。QUnit集成测试中的Promise

  •  3
  • yorbro  · 技术社区  · 10 年前

    我正在为我的Ember.js应用程序编写QUnit集成测试。在测试之前,我想通过向专用测试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 promise包装成RSVP promise,它会到达 “已完成” “失败” .

    为什么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 回复  |  直到 10 年前
        1
  •  2
  •   joegoldbeck    10 年前

    这可能与Ember运行循环在测试模式下被禁用有关。你结账了吗 ic-ajax ? https://github.com/instructure/ic-ajax 它以Ember喜欢的形式为您提供了承诺风格的jQueryajax请求,即使在测试中也是如此。我使用它来解决我在测试中遇到的Ember运行循环问题,到目前为止已经取得了很好的结果。

    或者,您可以尝试包装 teacher.then(.. Ember.run .