diff --git a/packages/cli/lib/utils.js b/packages/cli/lib/utils.js index 3717f36056b5..b274bb86bac2 100644 --- a/packages/cli/lib/utils.js +++ b/packages/cli/lib/utils.js @@ -224,13 +224,21 @@ exports.findArtifactPaths = async function(dir, artifactType, reader) { const readdir = reader || readdirAsync; debug(`Finding artifact paths at: ${dir}`); - // Wrapping readdir in case it's not a promise. - const files = await readdir(dir); - return _.filter(files, f => { - return ( - _.endsWith(f, `${artifactType}.js`) || _.endsWith(f, `${artifactType}.ts`) + try { + // Wrapping readdir in case it's not a promise. + const files = await readdir(dir); + return files.filter( + f => + _.endsWith(f, `${artifactType}.js`) || + _.endsWith(f, `${artifactType}.ts`), ); - }); + } catch (err) { + if (err.code === 'ENOENT') { + // Target directory was not found (e.g. "src/models" does not exist yet). + return []; + } + throw err; + } }; /** * Parses the files of the target directory and returns matching JavaScript diff --git a/packages/cli/test/integration/generators/controller.integration.js b/packages/cli/test/integration/generators/controller.integration.js index 52c9c4d7adc2..c71fc37814fa 100644 --- a/packages/cli/test/integration/generators/controller.integration.js +++ b/packages/cli/test/integration/generators/controller.integration.js @@ -214,9 +214,7 @@ describe('lb4 controller', () => { }), ) .withPrompts(restCLIInputComplete), - ).to.be.rejectedWith( - /ENOENT: no such file or directory, scandir(.*?)models\b/, - ); + ).to.be.rejectedWith(/No models found in .*[\/\\]models\b/); }); it('fails when no repository directory present', () => { @@ -230,9 +228,7 @@ describe('lb4 controller', () => { }), ) .withPrompts(restCLIInputComplete), - ).to.be.rejectedWith( - /ENOENT: no such file or directory, scandir(.*?)repositories\b/, - ); + ).to.be.rejectedWith(/No repositories found in .*[\/\\]repositories\b/); }); }); }); diff --git a/packages/cli/test/integration/generators/model.integration.js b/packages/cli/test/integration/generators/model.integration.js index 58e797d41d96..ef613479ccf0 100644 --- a/packages/cli/test/integration/generators/model.integration.js +++ b/packages/cli/test/integration/generators/model.integration.js @@ -10,6 +10,7 @@ const path = require('path'); const assert = require('yeoman-assert'); const {expect, TestSandbox} = require('@loopback/testlab'); const {expectFileToMatchSnapshot} = require('../../snapshots'); +const {remove} = require('fs-extra'); const generator = path.join(__dirname, '../../../generators/model'); const tests = require('../lib/artifact-generator')(generator); @@ -118,6 +119,21 @@ describe('lb4 model integration', () => { basicModelFileChecks(expectedModelFile, expectedIndexFile); }); + it('creates "src/models" directory if it does not exist', async () => { + await testUtils + .executeGenerator(generator) + .inDir(SANDBOX_PATH, async () => { + testUtils.givenLBProject(SANDBOX_PATH); + await remove(path.resolve(SANDBOX_PATH, 'src/models')); + }) + .withPrompts({ + name: 'test', + propName: null, + }); + + basicModelFileChecks(expectedModelFile, expectedIndexFile); + }); + it('scaffolds correct files with model base class', async () => { await testUtils .executeGenerator(generator)