{"ref":"capability:ui5-testing","page":"/capabilities/ui5-testing","json":"/capabilities/ui5-testing.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"ui5-testing","name":"UI5 testing","domain":"developer-experience","ecosystems":["ui5"],"universal":false,"description":"Proving a UI still works — unit tests over controllers and formatters, integration tests that drive real controls, and end-to-end runs against a served app.","short":"Unit, integration and end-to-end tests for UI5 apps","core_coverage":{"state":"core-and-community","assessed_at":"2026-10-15","what_core_does":"QUnit for unit tests and OPA5 for the integration tests that drive the controls, an OData V2 mock server as a backend stand-in, and the Test Recorder, which the documentation states is part of the framework and which hands back a control locator or a ready code snippet for a control on the page.","where_it_stops":"Inside the page the tests opened, and at the test pages themselves. OPA's own documentation lists screen capturing, testing across more than one page and remote test execution as restrictions, and states that end-to-end tests are not recommended with OPA because of authentication issues and fragile test data. The framework ships the test frameworks and the pages rather than anything that executes them unattended, and its mock server mimics OData V2: the same documentation states the OData V4 mock server functionality is included with CAP Node.js.","community_adds":"The door's answer to the end-to-end layer is [wdi5](artifact:ui5-community-wdi5), a WebdriverIO service that drives a real browser against a served app with selectors compatible with OPA5's and supplies the credentials at the identity provider the configuration names; SAP's own testing page names it beside OPA5. Beside it the community answers what the framework leaves out: executing a project's existing QUnit and OPA5 pages unattended, as [wdio-qunit-service](artifact:mauriciolauffer-wdio-qunit-service) does in place of Karma, running unit tests in Node.js under [Jest](artifact:mauriciolauffer-jest-environment-ui5) or [Vitest](artifact:mauriciolauffer-vitest-environment-ui5) with no browser, generating mock data with [Faker.js](artifact:mauriciolauffer-openui5-smart-mockserver) instead of typing it, and recording a journey or live OData traffic instead of writing the test code and the mock data by hand. SAP's [ui5-middleware-code-coverage](artifact:ui5-middleware-code-coverage) reports coverage for the QUnit tests of a project served by the UI5 CLI.","relationship":"narrow-by-design","sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing","checked":"2026-10-15","quote":"SAPUI5 provides several testing options, like to unit and integration tests and the OData V2 mock server."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing, Recommended Tools","checked":"2026-10-15","quote":"We recommend OPA5 for integration tests. OPA5 is part of SAPUI5. It is built on top of QUnit and provides good integration with SAPUI5."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md","title":"SAPUI5 documentation — Integration Testing with One Page Acceptance Tests (OPA5), Restrictions of OPA5","checked":"2026-10-15","quote":"End-to-end tests are not recommended with OPA due to authentication issues and fragility of test data"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md","title":"SAPUI5 documentation — Restrictions of OPA5, remote execution","checked":"2026-10-15","quote":"Remote test execution"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, OData V2","checked":"2026-10-15","quote":"The mock server included with SAPUI5 mimics OData V2 back-end calls."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, OData V4","checked":"2026-10-15","quote":"The mock server functionality for OData V4 is included with CAP Node.js."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/test-recorder-2535ef9.md","title":"SAPUI5 documentation — Test Recorder","checked":"2026-10-15","quote":"part of the SAPUI5 framework and is available in all browsers"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/test-recorder-2535ef9.md","title":"SAPUI5 documentation — Test Recorder, raw selector","checked":"2026-10-15","quote":"gives you just the control locator with no function invocations and it can be easily used in other frameworks"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing, wdi5","checked":"2026-10-15","quote":"wdi5 uses a real browser and interacts with your app the same way a real user would."},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/README.md","title":"wdi5 — documentation home","checked":"2026-10-15","quote":"wdi5 (/vdif5/) is a Webdriver.IO service (think: extension), utilizing UI5's test API"},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/README.md","title":"wdi5 — documentation home, selectors","checked":"2026-10-15","quote":"with selectors compatible to OPA5"},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/authentication.md","title":"wdi5 — Authentication","checked":"2026-10-15","quote":"the `baseUrl` (from the `wdio.conf.(j|t)s`-file) is opened in the configured browser. Then, the redirect to the Authentication provider is awaited and the credentials are supplied."}]},"coverage_by_flavor":{"freestyle":{"state":"core-and-community","assessed_at":"2026-10-15","what_core_does":"The framework's own stack, aimed at code the developer wrote: QUnit over the controllers, formatters and modules of the app, OPA5 over the controls in its views, and the OData V2 mock server standing in for the service. SAP's testing tutorial walks all three.","where_it_stops":"At the browser the pages were opened in. The framework ships no runner that executes the pages unattended — its testing page points at a local test runner for that — and OPA's restrictions hold: no screen capturing, no test across more than one page, no remote execution.","community_adds":"A command line that runs the project's existing QUnit and OPA5 pages across parallel browsers, a WebdriverIO service that drives a served app as a user would, Node.js test environments for unit tests, and recorders and generators that write the test code or the mock data the developer would otherwise type.","relationship":"narrow-by-design","sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/03_Get-Started/testing-tutorial-291c912.md","title":"SAPUI5 documentation — Tutorial: Testing","checked":"2026-10-15","quote":"At different steps of this tutorial you will write tests using QUnit, OPA5, and the OData V2 mock server."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing, local test runner","checked":"2026-10-15","quote":"You can use a local test runner, such as Selenium or Karma, that automatically executes all tests whenever a file in the app project has been changed."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md","title":"SAPUI5 documentation — Restrictions of OPA5","checked":"2026-10-15","quote":"Note the following restrictions of OPA:"}]},"fiori-elements":{"state":"core-and-community","assessed_at":"2026-10-15","what_core_does":"An OPA test library for Fiori elements OData V4 applications, published as `sap.fe.test`: its test functions are what a journey calls, instead of locating the generated controls itself, and the project's own configuration file creates the pre-configured JourneyRunner the journeys run through.","where_it_stops":"At OData V4 applications generated by Fiori elements, which is the library's stated scope, and at OPA's restrictions, which hold for a generated screen as for a hand-written one. The framework's mock server mimics OData V2, so the data a generated OData V4 app is tested against does not come from it.","community_adds":"[wdi5](artifact:ui5-community-wdi5) drives the generated app in a real browser and can initialise SAP's own test library inside its tests, which its documentation scopes to wdi5 after 0.9.1 and SAPUI5 after 1.88.0; a separate selector set for generated controls, and a recorder that writes the journey, sit beside it.","relationship":"narrow-by-design","sources":[{"url":"https://developers.sap.com/tutorials/fiori-tools-mockserver-opa-testing.html","title":"Write OPA Tests for an SAP Fiori Elements for OData V4 Application — SAP Developer Center","checked":"2026-10-15","quote":"The OPA test library provides a set of test functions that can be reused within OPA tests of SAP Fiori elements for OData V4 applications."},{"url":"https://developers.sap.com/tutorials/fiori-tools-mockserver-opa-testing.html","title":"Write OPA Tests for an SAP Fiori Elements for OData V4 Application — the JourneyRunner","checked":"2026-10-15","quote":"This file creates and exports a shared, pre-configured JourneyRunner instance that all OPA5 integration test journey files in this project consume."},{"url":"https://developers.sap.com/group.fiori-elements-mockserver-opa.html","title":"Use the Mockserver and OPA Test Library with SAP Fiori Elements for OData V4 Applications — SAP Developer Center","checked":"2026-10-15","quote":"Learn how to use the functionalities of the Mockserver and how to adopt the SAP Fiori elements for OData V4 OPA test library for your test automation."},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/fe-testlib.md","title":"wdi5 — Fiori elements test library","checked":"2026-10-15","quote":"within [OPA5](https://ui5.sap.com/#/topic/2696ab50faad458f9b4027ec2f9b884d) or [wdi5](https://github.com/ui5-community/wdi5) tests"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, OData V4","checked":"2026-10-15","quote":"The mock server functionality for OData V4 is included with CAP Node.js."}]},"web-components":{"state":"not-applicable","assessed_at":"2026-09-14","note":"UI5 Web Components have no controller, view or control tree for QUnit and OPA5 to test: the library describes itself as usable with any current or future web development framework rather than built on the OpenUI5 runtime. wdi5, the community's end-to-end framework for UI5 apps, defines its own locators as something that identifies a UI5 control to retrieve and use for further test work, which a Web Components app has none of.","sources":[{"url":"https://github.com/SAP/ui5-webcomponents","title":"SAP/ui5-webcomponents — README","checked":"2026-09-14","quote":"Usable with any current or future web development framework (React, Angular, Vue, etc.)."},{"url":"https://github.com/ui5-community/wdi5/blob/main/docs/locators.md","title":"ui5-community/wdi5 — docs/locators.md","checked":"2026-09-14","quote":"they identify a UI5 control to retrieve and use for further (test-)work"}]}},"framing_by_flavor":{"fiori-elements":{"description":"The screens under test are generated from annotations rather than written by hand, so a test cannot start from a control the developer named: the Test Recorder's own documentation warns that automatically generated ids start with a double underscore and are unsuitable for tests. The question here is which published test function stands for the part of the generated app a journey is about."}},"facets":[{"key":"test_level","label":"Test level","kind":"many","values":["Unit tests","Integration tests","End-to-end tests"]},{"key":"coverage_report","label":"Code coverage","kind":"flag"}],"history":[{"date":"2026-09-14","field":"coverage_by_flavor.web-components","from":null,"to":"not-applicable","reason":"wdi5's own docs define a locator as something that identifies a UI5 control, and UI5 Web Components' own README describes the library as usable with any web framework rather than built on OpenUI5; none of the ui5-door providers of this capability (openui5-core, ui5-community-wdi5, ui5-community-wdi5-cucumber, ui5-community-ui5-journey-recorder) state web-components on a flavors or provides edge."},{"date":"2026-10-15","field":"core_coverage","from":"QUnit for unit tests, OPA5 for integration tests that drive controls, and an OData V2 mock server for a backend stand-in. It stops inside the browser it started.","to":"The same stack plus the Test Recorder, and a boundary quoted from OPA's and the mock server's own pages.","reason":"The boundary rested on one sentence of the testing overview. OPA's own page lists its restrictions, screen capturing, testing across more than one page and remote test execution, and states end-to-end tests are not recommended with OPA; the mock server page states the OData V4 mock server functionality is included with CAP Node.js. Both are the core's own statements of where it stops, and neither was recorded. The Test Recorder, which the documentation states is part of the framework, was missing from what the core does. community_adds was empty."},{"date":"2026-10-15","field":"core_coverage.sources","from":"https://ui5.sap.com/#/topic/7cdee404cac441888539ed7bfe076e57","to":"SAP's own documentation repository, SAP-docs/sapui5","reason":"The demo kit address is a single-page application behind a hash route: a fetcher sent there receives the shell and not the sentence, so the quote could not be re-checked at the cited URL. The same pages are published as markdown in SAP's documentation repository, which is what the corpus already cites for SAP documentation elsewhere, and every quote here was read there on 2026-10-15."},{"date":"2026-10-15","field":"coverage_by_flavor.freestyle","from":null,"to":"core-and-community","reason":"The flavor had no assessment, so its tile was derived from the options that state it. The framework's stack is aimed at code the developer wrote, which is what SAP's testing tutorial walks, and the door's own boundary is that nothing in the framework executes those pages unattended — its testing page points at a local test runner for that."},{"date":"2026-10-15","field":"coverage_by_flavor.fiori-elements","from":null,"to":"core-and-community","reason":"SAP ships a Fiori elements OData V4 OPA test library, sap.fe.test, whose functions a journey calls instead of locating generated controls, run through a JourneyRunner the project configures. That is a different core answer from the freestyle one and was not recorded at any level of this entry."},{"date":"2026-10-15","field":"framing_by_flavor.fiori-elements","from":null,"to":"added","reason":"What the concern is here differs from the shared description: the control under test was generated, and the Test Recorder's page states that automatically generated ids start with a double underscore and are unsuitable for tests. Editorial, kept out of the flavor's coverage."},{"date":"2026-10-15","field":"facets","from":null,"to":"test_level, coverage_report","reason":"Two questions the options' own documentation answers and a reader asks first: which level of the suite a tool is for, and whether it produces a coverage report. Three more were researched and left out. Whether a tool reaches an app served elsewhere would have been stated yes by two options and by nobody as a no, so it would have separated rows by absence, which absence does not mean. The automation libraries a tool drives are named by one option only. Declared maturity is the lifecycle field on the artifact, not a column here."},{"date":"2026-10-26","field":"core_coverage.community_adds","from":"... Beside it the community answers what the framework leaves out — executing a project's existing QUnit and OPA5 pages unattended and in parallel, and recording a journey or live OData traffic ...","to":"... executing existing pages unattended with wdio-qunit-service, unit tests in Node.js under Jest or Vitest, Faker.js mock data, recording, and SAP's ui5-middleware-code-coverage for QUnit coverage.","reason":"Reassessed against the graph (check:capabilities): six providers newer than the assessment were not named: Jest and Vitest environments, a Faker.js mock server, a WebdriverIO QUnit runner, a coverage middleware and a mock-data generator. They change the kinds of answer, so the text now names the kinds and links the ones that define them. State unchanged."},{"date":"2026-10-26","field":"coverage_by_flavor.freestyle.community_adds","from":"... and recorders that write the test code or the mock data the developer would otherwise type.","to":"... Node.js test environments for unit tests, and recorders and generators that write the test code or the mock data the developer would otherwise type.","reason":"Reassessed against the graph (check:capabilities): Node.js unit test environments and mock-data generators are kinds the text did not name."}],"drafted_with_ai":true},"sap_delivery":{"door":"ui5","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:openui5-core","name":"@openui5/sap.ui.core","json":"/artifacts/openui5-core.json"},{"ref":"artifact:ui5-middleware-code-coverage","name":"@ui5/middleware-code-coverage","json":"/artifacts/ui5-middleware-code-coverage.json"}]},"by_flavor":{"freestyle":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:openui5-core","name":"@openui5/sap.ui.core","json":"/artifacts/openui5-core.json"}]},"fiori-elements":null,"web-components":null}},"edges":{"use_cases":[{"id":"get-test-code-for-a-fiori-elements-screen","name":"Get test code for a Fiori elements screen without writing selectors by hand","capability":"capability:ui5-testing","ecosystem":"ui5","flavors":["fiori-elements"],"outcome":"A test addresses the controls of a generated list report or object page without a developer working out locators for ids the framework generated.","boundary":"Covers getting to the code or the locator. What the test then asserts, and running it, are other tasks.","origin":"Editorial hypothesis from the Test Recorder's own page, which states that automatically generated ids start with a double underscore and are unsuitable for tests.","requirement_dimensions":["Whether the tests being written are OPA5 or wdi5","Whether a single locator is wanted or a whole recorded journey","Whether the person writing the tests can install a browser extension"],"contributions":[{"ref":"artifact:ui5-community-ui5-journey-recorder","role":"journey recorder","state":"documented","description":"A Chrome extension that records the clicks and inputs made against a running application and exports the recording as OPA5 or wdi5 code, so the sequence comes out of the recording along with the locators.","remaining_work":"Install the extension in Chrome, record against a running application, and keep the exported code as the project's own.","sources":[{"url":"https://raw.githubusercontent.com/ui5-community/ui5-journey-recorder/develop/README.md","title":"ui5-journey-recorder — README","checked":"2026-10-15","quote":"It is used to record and generate test journeys for"},{"url":"https://github.com/ui5-community/ui5-journey-recorder","title":"ui5-community/ui5-journey-recorder — GitHub repository","checked":"2026-09-13","quote":"Record using your UI5 app and export to wdi5 + OPA5!"}]},{"ref":"artifact:ui5-community-wdi5-fe-selectors","role":"selector set","state":"documented","description":"Answers the same outcome without recording anything: a set of wdi5 selectors for the controls Fiori elements generates, so a hand-written test takes the locator from the set instead of deriving it from a generated id.","remaining_work":"Install it beside wdi5 and use its selectors in the tests you write; it supplies locators and not the journey.","sources":[{"url":"https://github.com/ui5-community/wdi5-fe-selectors","title":"ui5-community/wdi5-fe-selectors — GitHub repository","checked":"2026-09-13","quote":"wdi5-flavored selectors for Fiori Element apps"}]},{"ref":"artifact:openui5-core","role":"framework recorder","state":"unknown","description":"The framework's own Test Recorder answers this — its page states the tool is part of the SAPUI5 framework, that it hands back a snippet for a control on the page, and that the raw dialect gives just the locator for use in other frameworks. Which published package a project gets it from is not established for this entry: the OpenUI5 repository ships it as a library of its own, sap.ui.testrecorder, beside sap.ui.core rather than inside it, and the graph holds no entry for that library.","remaining_work":"Establish which package carries the Test Recorder before this is recorded as a contribution of @openui5/sap.ui.core, and consider an entry for the library itself.","sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/test-recorder-2535ef9.md","title":"SAPUI5 documentation — Test Recorder","checked":"2026-10-15","quote":"part of the SAPUI5 framework and is available in all browsers"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/test-recorder-2535ef9.md","title":"SAPUI5 documentation — Test Recorder, raw selector","checked":"2026-10-15","quote":"gives you just the control locator with no function invocations and it can be easily used in other frameworks"},{"url":"https://github.com/SAP/openui5/tree/master/src","title":"SAP/openui5 — the repository's libraries","checked":"2026-10-15","quote":"sap.ui.testrecorder"}]}],"unknowns":["Which published package carries the framework's Test Recorder. SAP's page says it is part of the SAPUI5 framework; the OpenUI5 repository has it as the separate library sap.ui.testrecorder, so the entry for @openui5/sap.ui.core cannot carry the claim on that evidence.","SAP's Fiori elements OPA test library, sap.fe.test, answers this outcome from the other side — a journey calls its published test functions instead of locating controls at all — and the graph holds no artifact for it. It is recorded in this capability's fiori-elements coverage and cannot be a contribution until an entry exists.","The Test Recorder's page states that automatically generated ids start with a double underscore and are unsuitable for tests; whether the locators the two community options produce avoid those ids was not established from their own documentation."],"assessed_at":"2026-10-15","drafted_with_ai":true,"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"run-a-ui5-apps-tests-with-no-backend","name":"Run a UI5 app's tests with no backend behind it","capability":"capability:ui5-testing","ecosystem":"ui5","flavors":["freestyle","fiori-elements"],"outcome":"The application under test answers its own service calls from mock data, so the tests run with no backend reachable.","boundary":"Covers standing in for the service. Writing the tests is a different task, and so is keeping mock data in step with a model that changes.","origin":"Editorial hypothesis from the framework's own mock server page, which states the OData V4 mock server functionality is included with CAP Node.js.","requirement_dimensions":["Which OData version the application's service speaks","Whether the data has to resemble real records or only satisfy the metadata","Whether several services, clients or tenants have to be mocked side by side"],"contributions":[{"ref":"artifact:openui5-core","role":"client-side service stand-in","state":"conditional","description":"The OData V2 mock server intercepts the application's calls inside the client, with no network behind it, and answers from data generated out of the service metadata or from JSON files the project keeps.","remaining_work":"Decide between generated data and hand-kept JSON files, and keep the files in step with the metadata as the model changes.","conditions":["The service is OData V2: the page states the mock server included with SAPUI5 mimics OData V2 back-end calls, and that the OData V4 mock server functionality is included with CAP Node.js","The resources are represented as JSON, which the page states is the only format the mock server supports"],"sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, OData V2","checked":"2026-10-15","quote":"The mock server included with SAPUI5 mimics OData V2 back-end calls."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, client-based","checked":"2026-10-15","quote":"It simulates the OData provider and is completely client-based, meaning that no network connectivity to a remote host is required."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, what it serves","checked":"2026-10-15","quote":"It supports randomly generated data based on the service metadata as well as mock data provided in JSON files."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, JSON only","checked":"2026-10-15","quote":"The mock server only supports the JSON format for representing the resources it exposes, such as collections, entries, links, and so on."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/mock-server-69d3cbd.md","title":"SAPUI5 documentation — Mock Server, OData V4","checked":"2026-10-15","quote":"The mock server functionality for OData V4 is included with CAP Node.js."}]},{"ref":"artifact:marianfoo-ui5-middleware-odata-recorder","role":"dataset recorder","state":"conditional","description":"Supplies the data from the other direction: a server middleware records the OData traffic a running application makes and writes entity JSON files and metadata.xml, so the replay answers with what a real backend returned rather than with records written by hand.","remaining_work":"Record a journey that touches everything the tests touch, turn the Fiori tools app reload off while recording, as its README asks, and set up the mock server the files are written for.","conditions":["The project replays with the SAP Fiori elements mock server, which is what the recorder generates its files for","The recorded journey touched the entities the tests need: the dataset holds what the application asked for and nothing else"],"sources":[{"url":"https://raw.githubusercontent.com/marianfoo/ui5-middleware-odata-recorder/main/README.md","title":"ui5-middleware-odata-recorder — README","checked":"2026-10-15","quote":"Record OData traffic from your UI5 app and generate FE-mockserver-compatible datasets"},{"url":"https://raw.githubusercontent.com/marianfoo/ui5-middleware-odata-recorder/main/README.md","title":"ui5-middleware-odata-recorder — README, app reload","checked":"2026-10-15","quote":"Disable `fiori-tools-appreload` during recording to prevent reload loops"},{"url":"https://github.com/marianfoo/ui5-middleware-odata-recorder","title":"marianfoo/ui5-middleware-odata-recorder — README, Key Features","checked":"2026-09-18","quote":"**Ready-to-Use**: Generates files compatible with SAP FE Mockserver"}]}],"unknowns":["The mock server the recorder writes for, SAP's Fiori elements mockserver middleware, is not in the graph, so the way through it is recorded here as a condition on the recorder rather than as a part of its own. A sample about that middleware and a piece of writing on it are already waiting in staging and were left alone by this job.","Nothing read here establishes what a generated OData V4 Fiori elements application uses for mock data when CAP is not in the picture; the framework's page points at CAP Node.js for V4 and the Fiori tools path was not read for this assessment.","Whether the recorder's datasets can be replayed for an OData V2 service as well as V4 is not stated by its README."],"assessed_at":"2026-10-15","drafted_with_ai":true,"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"run-a-ui5-projects-test-pages-unattended","name":"Run a UI5 project's existing QUnit and OPA5 pages unattended","capability":"capability:ui5-testing","ecosystem":"ui5","flavors":["freestyle","fiori-elements"],"outcome":"The test pages a project already has run from one command, with nobody opening them in a browser tab, and the run leaves a report a pipeline can read.","boundary":"Covers executing pages that exist. Writing them is a different task, and so is what serves the application while they run.","origin":"Editorial hypothesis, taken from the framework's own testing page: it names a local test runner as the thing that executes the tests and ships none.","requirement_dimensions":["Whether the sources are TypeScript and have to be transpiled before the run","Whether the pipeline needs a coverage report","How large the suite is, since a single browser page holds all of it at once","Which browsers the run has to cover"],"contributions":[{"ref":"artifact:openui5-core","role":"test frameworks and test pages","state":"conditional","description":"Ships the QUnit and OPA5 the pages are written against, and the testsuite page that lists them. What it does not ship is the thing that opens them: its own testing page hands that job to a local test runner.","remaining_work":"Choose and configure that runner, and decide where its report goes.","conditions":["A runner outside the framework executes the pages; the framework's testing page names a local test runner such as Selenium or Karma for that"],"sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing","checked":"2026-10-15","quote":"SAPUI5 provides several testing options, like to unit and integration tests and the OData V2 mock server."},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing, local test runner","checked":"2026-10-15","quote":"You can use a local test runner, such as Selenium or Karma, that automatically executes all tests whenever a file in the app project has been changed."}]},{"ref":"artifact:arnaudbuchholz-ui5-test-runner","role":"command-line runner","state":"documented","version_scope":"Documentation of version 6, read on 2026-10-15.","description":"One command runs the project's QUnit and OPA5 pages, each page in its own browser instance and a configurable number at a time, two by default, and consolidates every result into one report. Nothing in the existing test files changes.","remaining_work":"Pick the mode: remote mode takes the URL of a test suite page on an application somebody else serves, legacy mode has the runner serve the application itself. Coverage is a switch in version 6 rather than the default.","sources":[{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/introduction.md","title":"ui5-test-runner — Introduction","checked":"2026-10-15","quote":"It runs your QUnit and OPA5 test pages in parallel across real browsers and produces a consolidated report of every test result — without requiring any changes to your existing tests."},{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/introduction.md","title":"ui5-test-runner — Introduction, how it works","checked":"2026-10-15","quote":"Opens a configurable number of browser tabs in parallel (controlled by `--parallel`, default: `2`)"},{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/introduction.md","title":"ui5-test-runner — Introduction, the report","checked":"2026-10-15","quote":"When the run finishes, the report is available at `report/report.html` in your current working directory."},{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/index.md","title":"ui5-test-runner — documentation index","checked":"2026-10-15","quote":"A standalone Node.js CLI that drives browsers to execute UI5 (Fiori/SAPUI5/OpenUI5) test pages and produces CTRF JSON reports."}]},{"ref":"artifact:ui5-community-karma-ui5-transpile","role":"preprocessor for a Karma run","state":"conditional","description":"Makes the Karma way work for a project whose sources are TypeScript: the preprocessor transpiles them with the project's own ui5-tooling-transpile configuration before the tests run, which is how coverage is collected for such a project. Its README states the project has been deprecated and points at the UI5 community projects tagged testing.","remaining_work":"Install karma, karma-ui5, karma-coverage and a browser launcher beside it, configure the preprocessor per path in karma.conf.js, and keep the coverage preprocessor out of that list, which the README warns would instrument the sources twice. Picking a successor is the maintainer's own advice.","conditions":["The project has a ui5.yaml configuring ui5-tooling-transpile 3.0.0 or later, and karma 6.4.1 or later","The karma-ui5 plugin is installed alongside it, which the README calls obligatory because the configuration is read from it"],"sources":[{"url":"https://raw.githubusercontent.com/ui5-community/ui5-ecosystem-showcase/main/packages/karma-ui5-transpile/README.md","title":"karma-ui5-transpile — README","checked":"2026-10-15","quote":"The `karma-ui5-transpile` preprocessor transpiles code of UI5 projects having a `ui5.yaml` using `ui5-tooling-transpile` UI5 CLI extension."},{"url":"https://raw.githubusercontent.com/ui5-community/ui5-ecosystem-showcase/main/packages/karma-ui5-transpile/README.md","title":"karma-ui5-transpile — README, Prerequisites","checked":"2026-10-15","quote":"The plugin requires [`karma`](https://www.npmjs.com/package/karma) `>=6.4.1`, and [ui5-tooling-transpile](https://www.npmjs.com/package/ui5-tooling-transpile) `>=3.0.0`."},{"url":"https://raw.githubusercontent.com/ui5-community/ui5-ecosystem-showcase/main/packages/karma-ui5-transpile/README.md","title":"karma-ui5-transpile — README, double instrumentation","checked":"2026-10-15","quote":"When using the `ui5-transpile` preprocessor please avoid using the `coverage` preprocessor as the instrumentation will also take place during the `ui5-transpile` Babel transformation process."},{"url":"https://raw.githubusercontent.com/ui5-community/ui5-ecosystem-showcase/main/packages/karma-ui5-transpile/README.md","title":"karma-ui5-transpile — README, deprecation notice","checked":"2026-10-15","quote":"This project has been deprecated. We recommend you to pick a successor from the [available UI5 community projects](https://bestofui5.org/#/packages?tokens=testing:tag)."}]}],"needs":[{"any":[{"key":"test_level","value":"Unit tests"},{"key":"test_level","value":"Integration tests"}]}],"unknowns":["Whether version 6 of ui5-test-runner still takes puppeteer, selenium-webdriver and nyc from the tested project at run time, as its README stated on 2026-09-30: the version 6 dependency-management page was not read for this assessment.","What SAP's own karma-ui5 plugin states today was not read, and the graph holds no entry for it, so the Karma way is recorded here only through the community preprocessor that extends it."],"assessed_at":"2026-10-15","drafted_with_ai":true,"readings":[],"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"test-a-deployed-ui5-app-from-a-pipeline","name":"Test a UI5 app that is already deployed, from a pipeline","capability":"capability:ui5-testing","ecosystem":"ui5","flavors":["freestyle","fiori-elements"],"outcome":"A test reaches the application a user would open — deployed, served by somebody else, possibly behind a login — and the run happens in a pipeline rather than on a developer's machine.","boundary":"Covers reaching and driving a deployed application. What the tests assert, and how the application got deployed, are not part of it.","origin":"Editorial hypothesis from the framework's own OPA page, which lists remote test execution among OPA's restrictions and states that end-to-end tests are not recommended with it.","requirement_dimensions":["Whether the deployed application is behind an identity provider, and which one","Whether a second authentication factor is enforced","Whether the application's test pages are deployed with it or only its productive code","Which browsers the run has to cover"],"contributions":[{"ref":"artifact:openui5-core","role":"framework test stack","state":"explicitly-unsupported","description":"The framework's integration tool is OPA5, and its page rules this scope out: remote test execution is listed among OPA's restrictions, as is testing across more than one page, and the page states end-to-end tests are not recommended with OPA because of authentication issues and fragile test data.","remaining_work":"Nothing to configure here. The framework's own page sends this job outside OPA.","sources":[{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md","title":"SAPUI5 documentation — Restrictions of OPA5, remote execution","checked":"2026-10-15","quote":"Remote test execution"},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/integration-testing-with-one-page-acceptance-tests-opa5-2696ab5.md","title":"SAPUI5 documentation — Restrictions of OPA5, end-to-end tests","checked":"2026-10-15","quote":"End-to-end tests are not recommended with OPA due to authentication issues and fragility of test data"}]},{"ref":"artifact:ui5-community-wdi5","role":"end-to-end driver","state":"conditional","description":"Opens the baseUrl its configuration names in a real browser, waits for the redirect to the authentication provider and supplies the credentials, with the provider chosen by configuration rather than written into the tests. Tests start through WebdriverIO's own command line, so a pipeline step is what runs them.","remaining_work":"Put the credentials where the pipeline can hand them to the configuration, and keep the test code itself free of the login: the documentation states no changes in the test code are needed for using authentication.","conditions":["The login is one the authentication page covers — SAP Cloud IdP, SAP Cloud Identity Services, Office 365, a custom provider or basic authentication — and does not require a second factor, which that page states is not supported"],"sources":[{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/authentication.md","title":"wdi5 — Authentication","checked":"2026-10-15","quote":"the `baseUrl` (from the `wdio.conf.(j|t)s`-file) is opened in the configured browser. Then, the redirect to the Authentication provider is awaited and the credentials are supplied."},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/authentication.md","title":"wdi5 — Authentication, multi-factor","checked":"2026-10-15","quote":"Multi-Factor Authentication is not supported as it's nearly impossible to manage any media break (e.g. browser ↔ mobile) in authentication flows out of the box."},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/authentication.md","title":"wdi5 — Authentication, by configuration only","checked":"2026-10-15","quote":"no changes in the test code are needed for using authentication in `wdi5` tests"},{"url":"https://raw.githubusercontent.com/ui5-community/wdi5/main/docs/running.md","title":"wdi5 — Running the tests","checked":"2026-10-15","quote":"$> npx wdio run wdio-ui5tooling.conf.js \"--spec\" \"basic\""},{"url":"https://raw.githubusercontent.com/SAP-docs/sapui5/main/docs/04_Essentials/testing-7cdee40.md","title":"SAPUI5 documentation — Testing, wdi5","checked":"2026-10-15","quote":"wdi5 uses a real browser and interacts with your app the same way a real user would."}]},{"ref":"artifact:arnaudbuchholz-ui5-test-runner","role":"runner against a served instance","state":"conditional","version_scope":"Documentation of version 6, read on 2026-10-15.","description":"Reaches a deployed instance from the other side: remote mode takes the URL of the application's test suite page and needs no access to the sources, so what runs is the in-page suite on a deployed application rather than a journey through it.","remaining_work":"Deploy the test pages with the application, point the runner at their URL, and establish how the run gets past a login — nothing read for this assessment states that it can.","conditions":["The application's test suite page is reachable at a URL, which is where remote mode starts"],"sources":[{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/introduction.md","title":"ui5-test-runner — Introduction, remote mode","checked":"2026-10-15","quote":"Your application is served by any means (`@ui5/cli`, a custom server, a corporate environment), and you point the runner at its test suite URL."},{"url":"https://github.com/ArnaudBuchholz/ui5-test-runner/blob/master/docs/introduction.md","title":"ui5-test-runner — Introduction, remote mode constraints","checked":"2026-10-15","quote":"This mode imposes the fewest constraints: the runner does not need access to your source files and is agnostic to how the application is served."}]}],"readings":[{"ref":"content:sap-tutorial-cicd-wdi5-cap","relevance":"SAP's own tutorial runs wdi5 against a deployed application's URL as a WebdriverIO step in SAP Continuous Integration and Delivery. It shows the deployed-and-in-a-pipeline half of this outcome and not the login half: it tells you to leave the credentials field empty, because its test application does not require them.","shows":["artifact:ui5-community-wdi5"]}],"needs":[{"key":"test_level","value":"End-to-end tests"}],"unknowns":["Whether ui5-test-runner can complete a login at an identity provider: its documentation describes remote mode by the URL of a test suite page and says nothing about authentication.","No source read here shows wdi5's authentication running unattended in a pipeline. The tutorial that shows the pipeline step uses an application that needs no credentials, and the authentication page is documentation rather than a recorded run.","wdi5-cucumber and wdi5-fe-selectors extend wdi5 and were not assessed for this outcome; neither states anything about reaching a deployed application, and absence is not a no."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"}],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:openui5-core","name":"@openui5/sap.ui.core","json":"/artifacts/openui5-core.json","ecosystem":"ui5","origin_ring":"sap-official"},{"ref":"artifact:ui5-middleware-code-coverage","name":"@ui5/middleware-code-coverage","json":"/artifacts/ui5-middleware-code-coverage.json","ecosystem":"ui5","origin_ring":"sap-official"},{"ref":"artifact:mauriciolauffer-jest-environment-ui5","name":"jest-environment-ui5","json":"/artifacts/mauriciolauffer-jest-environment-ui5.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:ui5-community-karma-ui5-transpile","name":"karma-ui5-transpile","json":"/artifacts/ui5-community-karma-ui5-transpile.json","ecosystem":"ui5","origin_ring":"community-org"},{"ref":"artifact:mauriciolauffer-openui5-smart-mockserver","name":"openui5-smart-mockserver","json":"/artifacts/mauriciolauffer-openui5-smart-mockserver.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:ui5-community-ui5-journey-recorder","name":"ui5-journey-recorder","json":"/artifacts/ui5-community-ui5-journey-recorder.json","ecosystem":"ui5","origin_ring":"community-org"},{"ref":"artifact:marianfoo-ui5-middleware-odata-recorder","name":"ui5-middleware-odata-recorder","json":"/artifacts/marianfoo-ui5-middleware-odata-recorder.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:arnaudbuchholz-ui5-test-runner","name":"ui5-test-runner","json":"/artifacts/arnaudbuchholz-ui5-test-runner.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:mauriciolauffer-vitest-environment-ui5","name":"vitest-environment-ui5","json":"/artifacts/mauriciolauffer-vitest-environment-ui5.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:wozjac-vscode-ui5-odata-mock-generator","name":"vscode-ui5-odata-mock-generator","json":"/artifacts/wozjac-vscode-ui5-odata-mock-generator.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:ui5-community-wdi5-cucumber","name":"wdi5-cucumber","json":"/artifacts/ui5-community-wdi5-cucumber.json","ecosystem":"ui5","origin_ring":"community-org"},{"ref":"artifact:ui5-community-wdi5-fe-selectors","name":"wdi5-fe-selectors","json":"/artifacts/ui5-community-wdi5-fe-selectors.json","ecosystem":"ui5","origin_ring":"community-org"},{"ref":"artifact:mauriciolauffer-wdio-qunit-service","name":"wdio-qunit-service","json":"/artifacts/mauriciolauffer-wdio-qunit-service.json","ecosystem":"ui5","origin_ring":"independent"},{"ref":"artifact:ui5-community-wdi5","name":"wdio-ui5-service","json":"/artifacts/ui5-community-wdi5.json","ecosystem":"ui5","origin_ring":"community-org"}],"samples":[{"ref":"artifact:ui5-sample-app","name":"@ui5/sample-app","json":"/artifacts/ui5-sample-app.json"},{"ref":"artifact:ui5-community-showcase-ui5-app","name":"ui5-app","json":"/artifacts/ui5-community-showcase-ui5-app.json"},{"ref":"artifact:marianfoo-ui5-fe-mockserver-tutorial","name":"ui5-fe-mockserver-tutorial","json":"/artifacts/marianfoo-ui5-fe-mockserver-tutorial.json"},{"ref":"artifact:ui5-community-showcase-ui5-lib","name":"ui5-lib","json":"/artifacts/ui5-community-showcase-ui5-lib.json"},{"ref":"artifact:ui5-community-showcase-ui5-tsapp","name":"ui5-tsapp","json":"/artifacts/ui5-community-showcase-ui5-tsapp.json"},{"ref":"artifact:ui5-community-showcase-ui5-tslib","name":"ui5-tslib","json":"/artifacts/ui5-community-showcase-ui5-tslib.json"},{"ref":"artifact:ui5-community-wdi5-workshop","name":"wdi5-workshop","json":"/artifacts/ui5-community-wdi5-workshop.json"}],"explained_by":[{"ref":"content:using-the-ui5-mockserver-for-client-specific-data-and-testing","name":"Using the UI5 Mockserver for Client-Specific Data and Testing","json":"/content/using-the-ui5-mockserver-for-client-specific-data-and-testing.json"}],"normative_context":[]}}