有没有办法在慢速模式下运行 ember 验收测试用例?

rin*_*mon 1 ember.js ember-data ember-testing ember-cli ember-qunit

我写了一些 ember 验收测试用例。问题是当我http://localhost:4200/tests通过 Acceptance访问 URL和过滤器模块时,测试用例运行速度快如闪电。即使这些是在async await函数中编写的。

我想使用 ember 运行循环run.laterrun.next. 但这不是解决方案。

有没有办法slow mode在应用程序顶部的某个地方添加(或)是否有任何已经存在的测试助手?所以我可以看到运行中的测试用例。

han*_*ars 5

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

这个问题出现在我可以问一个问题的集中!您可以观看录音以了解如何使用下面的代码以及如何使用调试器和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');
  });
});
Run Code Online (Sandbox Code Playgroud)

我还建议您使用浏览器的调试器按照自己的节奏逐步调试代码。它真的很强大,在大多数情况下,它可能不仅会减慢测试速度,还能帮助您更多。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');
  });
});
Run Code Online (Sandbox Code Playgroud)