loopbackio / loopbackio/loopback-next
Move slow tests from `npm test` to a different test task
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 5.1k
- Fork
- 1.1k
- Merge medio
- 2g 21h
- PR unite (30g)
- 27
Descrizione
Most of our test suite is running pretty fast, with individual tests finishing under 100ms. However, there are also several slow tests that take more than 1 second to finish. These tests are typically end-to-end/acceptance-level tests that are running running child processes, npm install and so on. As a result, npm test takes too long to complete (about 3 minutes on my machine).
Let's find a way how to reorganize our code base so that these slow tests can be put into "acceptance" or "end-to-end" group, excluded from npm test and have a dedicated CI job to run them in parallel with other CI tasks, as we are already doing for acceptance/repository-mysql and friends. (Alternatively, we can run the slow acceptance tests after the faster tests passed succesfully.)
- For example, we can introduce new package(s) in the
acceptancefolder, e.g.acceptance/cli-e2e-testsand move the slow tests there. This should be easy to implement, but requires more work to introduce e2e tests for new packages. - Create a new directory-layout convention for acceptance/end-to-end tests, so that we can keep e2e tests inside each package alongside other tests, but still be able to exclude these tests from monorepo-level
npm test. For example, we can introducesrc/__acceptance__directory for such tests.
Personally, I think the second option is much better.
List of very slow tests
Tests that take longer than one second to complete, sorted from the slowest:
- app-generator (SLOW) passes
npm testfor the generated project: 12441ms - Benchmark (SLOW) works: 4352ms
- lb4 relation generates model relation for existing property name verifies that a preexisting property will be overwritten: 2675ms
- lb4 relation add new controller to existing index file check if the controller exported to index file : 2026ms
- lb4 relation add controller to existing index file only once check if the controller exported to index file only once: 1961ms
- cloneExampleFromGitHub (SLOW) extracts project files: 1869ms
- lb4 relation updates property decorator when property already exist in the model: 1566ms
- lb4 relation HasOne rejects relation when source key already exist in the model: 1362ms
- lb4 relation HasOne Execute relation with existing relation name rejects if the relation name already exists in the repository: 1344ms
- lb4 relation HasMany Execute relation with existing relation name rejects if the relation name already exists in the repository: 1325ms
- lb4 relation rejects relation when destination model doesn't have primary Key: 1320ms
- tsdocs runs api-extractor: 1280ms
- lb4 relation HasMany rejects relation when source key already exist in the model: 1254ms
- lb4 copyright with git updates copyright/license headers with options: 1239ms
- lb4 copyright for monorepo updates copyright/license headers: 1205ms
- build compiles ts files: 1046ms
- Application rejects division by zero with 412 error: 1022ms
Nice to have
- Investigate why are
lb4 relationtests so slow. Do they have expensive setup? Can we find a more efficient way how to test the relation generator?
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia ispezionando la configurazione di npm test a livello di monorepo e la configurazione CI esistente per acceptance/repository-mysql. Esamina i test lenti elencati e confronta le opzioni di organizzazione di acceptance/cli-e2e-tests e src/__acceptance__. Il lavoro è completato quando i test veloci non vengono più eseguiti in npm test, mentre un task di acceptance dedicato o un job CI esegue i test lenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- nodejs, typescript
- Ambito
- build-system, ci-cd, testing-qa
- Tipo di issue
- Funzionalità
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100