测试 – 如何在Ember测试中断言运行循环DOM更改

测试 – 如何在Ember测试中断言运行循环DOM更改,第1张

概述我正在为Ember 1.6编写的Ember应用程序编写测试. 在控制器内部,我有一个在承诺成功时执行的功能: var me = this;function onSuccess(result) { printSuccessMessage(); Ember.RSVP.all(promises).then(function(value) { Ember.run.l 我正在为Ember 1.6编写的Ember应用程序编写测试.

在控制器内部,我有一个在承诺成功时执行的功能:

var me = this;function onSuccess(result) {    printSuccessMessage();    Ember.RSVP.all(promises).then(function(value) {        Ember.run.later(this,function() {            clearMessages();        },5000);    });}

然后,在测试中,我试图断言成功消息出现:

fillin('#MyinputFIEld','Some text');    click('#Mybutton');    andThen(function() {        strictEqual(find('[data-output="info-message"]').text().trim().indexOf('Done!') >= 0,true,'Expected success message!');    });

但问题是,点击后,然后等待运行循环完成.所以在这次点击之后,然后等待5秒然后执行断言.

在那一刻,clearMessages()已经执行,消息div被清除,测试失败.

知道怎么断言这条消息有某些文字吗?

解决方法 如果您愿意在代码中有条件,检查Ember是否处于测试模式,您可以在测试中切换Ember.testing值,然后清除或不清除控制器中的消息,基于此值.然后,您的测试可以断言消息在一个实例中被清除,并在另一个实例中显示.

在控制器的onSuccess调用中,观察Ember.testing条件:

onSuccess(message) {  this.printSuccessMessage(message);  if (Ember.testing) { // <-- HERE    // during testing    return; // don't clear the message and assert that it's there  } else {    // during dev,live in production,or Ember.testing === false    this.clearMessages(); // clear the message,and assert that it's gone  }  },

在用于设置消息的验收测试中,由于Ember.testing默认为true,因此控制器不会清除该消息,并且以下测试将成功:

test('setting the message',function(assert) {   visit('/messages');  fillin('input.text-input','Some text');  click('button.clicker');  // while Ember.testing is `true` (default),do not remove message  andThen(() => {    assert.equal(find('div.info-message').text(),'Done!','The message was set properly.');   });});

在接下来的测试中,观察Ember.testing的false切换,它将“模拟”控制器的实时开发或生产条件.控制器将正常清除消息,此测试也将成功:

test('clearing the message','Some text');  andThen(() => {    Ember.testing = false;  });  click('button.clicker');  // while Ember.testing is `false`,remove message,as normal,as in dev or prod  andThen(() => {    assert.equal(find('div.info-message').text(),'','The message has been cleared.');   });  // reset Ember.testing to its default  andThen(() => {    Ember.testing = true;  });});

请注意,只要不再需要false条件,Ember.testing就会重置为默认值true.这很重要因为Ember run loop behavior is different during testing by design.

在此解决方案中,一些代码已经过重构,以隔离问题并使单元测试更容易.这是一个Ember Twiddle的演示,这部分是受到article on Medium的启发.

总结

以上是内存溢出为你收集整理的测试 – 如何在Ember测试中断言运行循环DOM更改全部内容,希望文章能够帮你解决测试 – 如何在Ember测试中断言运行循环DOM更改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1056750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存