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
相关产品推荐
相关产品推荐

