繁体   English   中英

您如何断言Ember.js中使用了运行循环?

[英]How do you assert a run loop was used in Ember.js?

我在Ember服务中有以下代码:

return new Promise((resolve, reject) => {
  semaphore.take(() => {
    this.get('limiter').removeTokens(1, () => {
      semaphore.leave();

      this.get('requestSender').sendRequest(url).then(data => {
        run(null, resolve, cache.put(url, data, cacheTime));
      }).catch(function() {
        run(null, reject, arguments);
      });
    });
  });
});

我正在经历限制器回调,所以我需要一个运行循环(据我所知)。 我想在单元测试中断言使用了运行循环。 我可以断言promise会从缓存中解析出正确的值,但是我不知道如何验证是否使用了运行循环。 换句话说,我可以删除run调用,并且我的所有测试仍将通过,这是不希望的。

我想到的我不想诉诸的事情:

  • 我可以使用Ember.run代替run并使用存根和还原,但是我想在文件顶部解构全局变量( const { run } = Ember; ),所以我不想为了测试而牺牲它。
  • 我可以将run loop调用包装在另一个Ember服务中,以便对它进行存根处理,但这似乎有点过头了。

基本上,我想知道在进入运行循环时是否有任何事件可以触发我可以在测试中收听的事件。 如果涉及到Ember私人,那就可以了。

您可以在方法中添加参数,这将使您的服务方法更“可测试”。 分析这段代码:

const Ember = {
  run() {
    console.log('ORIGINAL METHOD');
  }
};
const { run } = Ember;

const service = {
  method(runMethod) {
    let runToCall = runMethod ? runMethod : run;
    runToCall();
  }
};

// in application
service.method();

// in tests
function mockedRun() {
  console.log('REPLACED METHOD');  
};

service.method(mockedRun);

哪个输出:

原始方法

替代方法

这是演示

最终,您可以使用:

我可以将run loop调用包装在另一个Ember服务中,以便对它进行存根处理,但这似乎有点过头了。

但是似乎将函数作为参数传递更为简单。

如果未启动运行循环,则测试将失败,因为您将获得一个断言。 这还不够吗?

为什么需要断言使用了运行循环?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM