有什么方法可以在慢速模式下运行余烬验收测试用例吗?

时间:2019-06-02 19:19:46

标签: ember.js ember-data ember-cli ember-qunit ember-testing

我写了一些余烬测试案例。事情是当我访问URL ... <persistence-unit-defaults> <delimited-identifiers /> </persistence-unit-defaults> ... 并通过Acceptance筛选模块时,测试用例运行得非常快。即使这些都是用http://localhost:4200/tests async函数编写的。

我想使用余烬运行循环awaitrun.later为每行设置时间延迟。但这不是解决方案。

是否可以在应用程序顶部的某个位置添加run.next(或)是否已经存在测试助手?这样我就可以看到正在运行的测试用例。

1 个答案:

答案 0 :(得分:2)

Ember测试没有“慢速模式”,但是您可以使用常规的JavaScript方法自己降低测试速度。例如,下面我们创建了一个wait方法,您可以在测试的每个步骤之间调用该方法。

这个问题出现在episode of May I Ask a Question上!您可以观看录像,以查看有关如何使用以下代码以及调试器和pauseTest的示例。

此代码将等待一秒钟,然后再移至下一行,即放在您放置await wait()的任何地方:

import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { click, find } from '@ember/test-helpers';

function wait(timeout = 1000) {
  return new Promise((resolve) => {
    setTimeout(resolve, timeout);
  });
}

module('Acceptance | slowdown', function(hooks) {
  setupApplicationTest(hooks);

  test('clicking the button reveals text', async function(assert) {
    await visit('/');
    await wait();
    await click('.test-button-1');
    await wait();
    assert.equal(find('.some-message').innerText, 'first message');
    await click('.test-button-2');
    await wait();
    assert.equal(find('.some-message').innerText, 'second message');
  });
});

我还建议您使用浏览器的调试器按照自己的进度逐步执行代码。它非常强大,在大多数情况下,它不仅可以减缓测试速度,还能为您提供更多帮助。 this.pauseTest()也很有帮助。

对于一些不太混乱的代码,也有可能使用JavaScript生成器,但是如果您使用它,则测试将无法正确退出,因此这是一种临时方法:

import { module, test } from 'qunit';
import { visit, currentURL } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { click, find } from '@ember/test-helpers';

function slowTest(message, generatorFunction) {
  test(message, async function(assert) {
    let generator = generatorFunction(assert);

    window.step = window.next = async () => {
      generator.next();
      await this.pauseTest();
    }

    window.finish = () => {
      generator.return();
      this.resumeTest();
    }

    await this.pauseTest();
  });

}

module('Acceptance | slowdown', function(hooks) {
  setupApplicationTest(hooks);

  slowTest('clicking the button reveals text', function*(assert) {
    yield visit('/');
    yield click('.test-button-1');

    assert.equal(find('.some-message').innerText, 'first message');

    yield click('.test-button-2');

    assert.equal(find('.some-message').innerText, 'second message');
  });
});