Ember.js在控制器

时间:2016-02-13 17:56:48

标签: ember.js ember-cli

我是一个控制器,其动作调用一个方法来执行某些异步操作并返回一个promise。

export default Ember.Controller.extend({

  _upload: function() {
    // return a promise
  },
  actions: {
    save: function(item) {
      this._upload(item).then(function(response) {
        // Handle success
      }, function(error) {
        // Handle error
      }
    }
  }
});

我想对Handle successHandle error下的代码进行单元测试。 在我的单元测试中,我使用

模拟了_uploadMethod
controller.set("_upload", function() {
  return new Ember.RSVP.Promise(function(resolve) {
    resolve({name: "image1"});
  });
});

然后我调用该操作并声明成功处理程序已完成作业

controller.send("save", "item");
assert.equal(controller.get("selected.item"), "item");

问题是断言失败是因为它在promise被解决之前运行并且成功处理程序中的所有东西都已完成。

如何在检查断言之前等待承诺解决?

2 个答案:

答案 0 :(得分:1)

如果您尝试这样做会怎样:

PUT

有点hacky方式,但它可能会奏效。

答案 1 :(得分:0)

要测试异步方法,可以使用测试助手waitUntil等待该方法的预期返回,如下面的代码。

 controller.send('changeStepAsyncActionExample');                                   
 await waitUntil(() => {                                                     
   return 'what you expect to the Promise resolve';                                
 }, { timeout: 4000, timeoutMessage: 'Your timeout message' });

 // If not timeout, the helper below will be executed

 assert.ok(true, 'The promise was executed correctly');