You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ember验收测试单独运行正常,批量运行除首个外全部失败

问题:批量运行验收测试时仅首个测试正常,其余测试无法渲染应用

我有5个验收测试,单独运行时全部通过,但批量运行时,只有第一个测试能正常执行,其余测试均无法渲染应用,导致全部失败。

已做排查:

  • 检查过未完成的等待器及应用状态稳定性,未发现异常
  • 已在代码异步操作部分添加waitFor声明,确保所有操作完成
  • 所有请求均通过MSW模拟,且每个测试都会启动mock service worker

相关依赖版本:

"@ember/test-helpers": "^2.8.1", "qunit": "^2.17.2", "qunit-dom": "^1.6.0", "ember-qunit": "^5.1.5", "ember-source": "~3.28.8", "ember-cli": "~3.28.5"

以下是包含3个测试的验收测试文件示例,批量运行时第一个测试表现正常,后续测试均因无法渲染而失败:

import { visit, waitFor, click, clearRender } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import backstop from 'ember-backstop/test-support/backstop';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { worker } from 'atlas-mocking/browser';
import { getSettledState } from '@ember/test-helpers/settled';
import { getPendingWaiterState } from '@ember/test-waiters';

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

  test('checking if basic values get loaded into detail page', async function (assert) {
    worker.start();
    authenticateSession({
      authToken: '12345',
      otherData: 'some-data',
    });

    await visit('/opportunity/index');
    await waitFor('[data-test="modelRouteTable"]');
    assert.dom('[data-test="modelRouteTable"]').exists();

    await visit('/opportunity/258234/view');
    //check if detailscreen of view page has been rendered
    await waitFor('[data-test="opportunityDetailSection"]');
    await backstop(assert);
    assert.dom('[data-test="name"]').exists();
    assert.dom('[data-test="opportunityStage"]').exists();
    assert.dom('[data-test="opportunityType"]').exists();
    assert.dom('[data-test="closeDate"]').exists();
    assert.dom('[data-test="currency"]').exists();
    assert.dom('[data-test="company"]').exists();
    assert.dom('[data-test="contact"]').exists();
    assert.dom('[data-test="externalReference"]').exists();
    assert.dom('[data-test="owner"]').exists();
    assert.dom('[data-test="organization"]').exists();
    assert.dom('[data-test="salesOrder"]').exists();
    assert.dom('[data-test="campaign"]').exists();

    assert.dom('[data-test="groupRequestDetail"]').exists();
    assert.dom('[data-test="directionType"]').exists();
    assert.dom('[data-test="departureDate"]').exists();
    assert.dom('[data-test="returnDate"]').exists();
    assert.dom('[data-test="directFlightsPreferred"]').exists();
    assert.dom('[data-test="requestNumber"]').exists();
    assert.dom('[data-test="country"]').exists();
    assert.dom('[data-test="extraFlightInformationDetail"]').exists();
    assert.dom('[data-test="passengerNames"]').exists();
    assert.dom('[data-test="budgetPerPerson"]').exists();
    assert.dom('[data-test="luggage"]').exists();
    assert.dom('[data-test="requestedAirline"]').exists();
    assert.dom('[data-test="groupType"]').exists();
    assert.dom('[data-test="commentsDetail"]').exists();
    assert.dom('[data-test="comments"]').exists();
    assert.dom('[data-test="internalComments"]').exists();
    console.log(getSettledState());
    console.log(getPendingWaiterState());
    await clearRender();
  });

  test('checking if correct values get added into edit view', async function (assert) {
    worker.start();
    authenticateSession({
      authToken: '12345',
      otherData: 'some-data',
    });

    await visit('/opportunity/index');
    await waitFor('[data-test="modelRouteTable"]');
    assert.dom('[data-test="modelRouteTable"]').exists();

    await visit('/opportunity/258234/view');
    await waitFor('[data-test="opportunityDetailSection"]');
    await click('[data-test="editButton"]');
    await waitFor('[data-test="opportunityEdit"]');

    //check if editscreen of detail page has been rendered with correct values
    assert.dom('[data-test="nameInput"] input').hasAnyValue();
    assert.dom('[data-test="opportunityStageInput"] select').hasAnyValue();
    assert.dom('[data-test="opportunityTypeInput"] select').hasAnyValue();
    assert.dom('[data-test="closeDateInput"] input').hasAnyValue();
    assert.dom('[data-test="currencyInput"] select').hasAnyValue();
    assert.dom('[data-test="companyInput"] .name').hasAnyText();
    assert.dom('[data-test="contactInput"] .name').hasAnyText();
    assert.dom('[data-test="externalReferenceInput"] input').hasAnyValue();
    assert.dom('[data-test="ownerInput"] .name').hasAnyText();
    assert.dom('[data-test="organizationInput"] select').hasAnyValue();

    assert.dom('[data-test="directionTypeInput"] select').hasAnyValue();
    assert.dom('[data-test="departureDateInput"] input').hasAnyValue();
    assert.dom('[data-test="returnDateInput"] input').hasAnyValue();
    assert.dom('[data-test="directFlightsPreferredInput"] input').hasNoValue();
    assert.dom('[data-test="requestNumberInput"] input').hasNoValue();
    assert.dom('[data-test="countryInput"] .name').doesNotExist();
    assert.dom('[data-test="passengerNamesInput"] select').hasAnyValue();
    assert.dom('[data-test="budgetPerPersonInput"] input').hasNoValue();
    assert.dom('[data-test="luggageInput"] select').hasAnyValue();
    assert.dom('[data-test="requestedAirlineInput"] .name').doesNotExist();
    assert.dom('[data-test="groupTypeInput"] select').hasAnyValue();
    assert.dom('[data-test="commentsInput"] textarea').hasNoValue();
    assert.dom('[data-test="internalCommentsInput"] textarea').hasNoValue();

    await click('[data-test="saveButton"]');
    console.log(getSettledState());
    console.log(getPendingWaiterState());
    await clearRender();
  });

  test('checking if new opportunity renders correctly', async function (assert) {
    worker.start();
    authenticateSession({
      authToken: '12345',
      otherData: 'some-data',
    });

    await visit('/opportunity/index');
    await waitFor('[data-test="modelRouteTable"]');
    assert.dom('[data-test="modelRouteTable"]').exists();

    await click('[data-test="addButton"]');

    assert.dom('[data-test="nameInput"] input').hasNoValue();
    assert.dom('[data-test="opportunityStageInput"] select').hasAnyValue();
    assert.dom('[data-test="opportunityTypeInput"] select').hasNoValue();
    assert.dom('[data-test="closeDateInput"] input').hasAnyValue();
    assert.dom('[data-test="currencyInput"] select').hasAnyValue();
    assert.dom('[data-test="companyInput"] .name').doesNotExist();
    assert.dom('[data-test="contactInput"] .name').doesNotExist();
    assert.dom('[data-test="externalReferenceInput"] input').hasNoValue();
    assert.dom('[data-test="ownerInput"] .name').hasAnyText();
    assert.dom('[data-test="organizationInput"] select').hasNoValue();
    assert.dom('[data-test="salesOrderInput"] .name').doesNotExist();
    assert.dom('[data-test="campaignInput"] .name').doesNotExist();
    console.log(getSettledState());
    console.log(getPendingWaiterState());
    await clearRender();
  });
});

内容的提问来源于stack exchange,提问作者Michael Vanhoutte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:25:17