如何用第三方组件和回调测试EmberJS ?

How can I test EmberJS with third party components and callbacks?

本文关键字:测试 EmberJS 回调 何用 第三方 组件      更新时间:2023-09-26

我们正在对应用程序进行集成测试,在使用Stripe JavaScript库时遇到了一个问题。我们有一个包装库的组件,从它开始令牌创建过程到完成该组件被销毁(这反过来又导致测试的其余部分失败)。典型的"修复"是将该方法包装在Ember.run中,但它似乎对它没有影响。让我举个例子。

actions: {
  update: function() {
    // Starting here this.get('isDestroyed') == false
    Stripe.card.createToken({
      number: "xx",
      cvc: "xx"
    }, function() {
       // Once we are here this.get('isDestroyed') == true
    })
  }
}

因为它很早就被破坏了,所以这里没有采取正常的行动。我们怎样才能让烬在等待这个回调完成的同时保持活着?

<标题>更新1

我在下面贴了一个答案,但很好奇为什么我不想这样做和/或为什么它不是官方文档的一部分。

<标题>更新2 h1> 个答案我张贴在下面修复测试,但实际的网站本身停止工作(只是坐在那里)。因此,虽然表面上似乎解决了问题,但显然没有完全起作用。

解决方案

似乎如果我手动启动和停止一个运行循环,它确实工作。但这不是文档所说的(尽管这样做很有意义)

actions: {
  update: function() {
    Ember.run.begin()
    Stripe.card.createToken({
      number: "xx",
      cvc: "xx"
    }, function() {
       // Perform actions
       Ember.run.end()
    })
  }
}

支持Ember.run的引用->

  1. http://balinterdi.com/2014/05/09/ember-dot-run-dot-bind.html
  2. http://emberjs.com/guides/understanding-ember/run-loop/toc_how-do-i-tell-ember-to-start-a-run-loop
  3. 什么是Ember RunLoop,它是如何工作的?(特别指出你不应该使用begin/end,因为这是run的功能)
  4. https://github.com/eoinkelly/ember-get-what-from-where/blob/master/ember-run-loop.md
  5. http://alexmatchneer.com/blog/2013/01/12/everything-you-never-wanted-to-know-about-the-ember-run-loop/(这似乎与堆栈溢出问题的内容大致相同)