From 234e5a777c7eb696afea433dc810282868962220 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Thu, 23 Apr 2020 00:34:29 -0700 Subject: [PATCH 1/2] Make sure user modules can be imported --- news/2 Fixes/11264.md | 1 + src/client/testing/unittest/services/discoveryService.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 news/2 Fixes/11264.md diff --git a/news/2 Fixes/11264.md b/news/2 Fixes/11264.md new file mode 100644 index 000000000000..36873e9c5dd7 --- /dev/null +++ b/news/2 Fixes/11264.md @@ -0,0 +1 @@ +Allow user modules import when discovering tests. diff --git a/src/client/testing/unittest/services/discoveryService.ts b/src/client/testing/unittest/services/discoveryService.ts index a1a246634978..8e3f7a06746c 100644 --- a/src/client/testing/unittest/services/discoveryService.ts +++ b/src/client/testing/unittest/services/discoveryService.ts @@ -29,7 +29,7 @@ export class TestDiscoveryService implements ITestDiscoveryService { const pythonScript = this.getDiscoveryScript(options); const unitTestOptions = this.translateOptions(options); const runOptions: Options = { - args: internalPython.execCode(pythonScript), + args: internalPython.execCode(pythonScript, false), cwd: options.cwd, workspaceFolder: options.workspaceFolder, token: options.token, From 9ae7050e38808cb64770d096ab07a5da786633f0 Mon Sep 17 00:00:00 2001 From: Karthik Nadig Date: Thu, 23 Apr 2020 11:44:21 -0700 Subject: [PATCH 2/2] Update tests --- .../unittest/services/discoveryService.ts | 2 ++ .../unittest/unittest.discovery.unit.test.ts | 24 +++++++++---------- .../testing/unittest/unittest.run.test.ts | 7 +++--- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/client/testing/unittest/services/discoveryService.ts b/src/client/testing/unittest/services/discoveryService.ts index 8e3f7a06746c..f09901e37f5f 100644 --- a/src/client/testing/unittest/services/discoveryService.ts +++ b/src/client/testing/unittest/services/discoveryService.ts @@ -29,6 +29,8 @@ export class TestDiscoveryService implements ITestDiscoveryService { const pythonScript = this.getDiscoveryScript(options); const unitTestOptions = this.translateOptions(options); const runOptions: Options = { + // unittest needs to load modules in the workspace + // isolating it breaks unittest discovery args: internalPython.execCode(pythonScript, false), cwd: options.cwd, workspaceFolder: options.workspaceFolder, diff --git a/src/test/testing/unittest/unittest.discovery.unit.test.ts b/src/test/testing/unittest/unittest.discovery.unit.test.ts index 32ebaa77f22f..1d03baada13e 100644 --- a/src/test/testing/unittest/unittest.discovery.unit.test.ts +++ b/src/test/testing/unittest/unittest.discovery.unit.test.ts @@ -71,8 +71,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.contain(dir); - expect(opts.args[2]).to.not.contain('loader.discover("."'); + expect(opts.args[1]).to.contain(dir); + expect(opts.args[1]).to.not.contain('loader.discover("."'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); @@ -117,8 +117,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.contain(dir); - expect(opts.args[2]).to.not.contain('loader.discover("."'); + expect(opts.args[1]).to.contain(dir); + expect(opts.args[1]).to.not.contain('loader.discover("."'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); @@ -163,8 +163,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.not.contain(dir); - expect(opts.args[2]).to.contain('loader.discover("."'); + expect(opts.args[1]).to.not.contain(dir); + expect(opts.args[1]).to.contain('loader.discover("."'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); @@ -205,8 +205,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.contain(pattern); - expect(opts.args[2]).to.not.contain('test*.py'); + expect(opts.args[1]).to.contain(pattern); + expect(opts.args[1]).to.not.contain('test*.py'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); @@ -251,8 +251,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.contain(pattern); - expect(opts.args[2]).to.not.contain('test*.py'); + expect(opts.args[1]).to.contain(pattern); + expect(opts.args[1]).to.not.contain('test*.py'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); @@ -297,8 +297,8 @@ suite('Unit Tests - Unittest - Discovery', () => { .setup((r) => r.run(typeMoq.It.isValue(UNITTEST_PROVIDER), typeMoq.It.isAny())) .callback((_, opts: Options) => { expect(opts.args).to.include('-c'); - expect(opts.args[2]).to.not.contain(pattern); - expect(opts.args[2]).to.contain('test*.py'); + expect(opts.args[1]).to.not.contain(pattern); + expect(opts.args[1]).to.contain('test*.py'); }) .returns(() => Promise.resolve(runOutput)) .verifiable(typeMoq.Times.once()); diff --git a/src/test/testing/unittest/unittest.run.test.ts b/src/test/testing/unittest/unittest.run.test.ts index 8cb304a05f1b..85428c185634 100644 --- a/src/test/testing/unittest/unittest.run.test.ts +++ b/src/test/testing/unittest/unittest.run.test.ts @@ -145,11 +145,10 @@ suite('Unit Tests - unittest - run with mocked process output', () => { .create()) as MockProcessService; procService.onExecObservable((_file, args, _options, callback) => { if ( - //args[0] is pyvsc-run-isolated.py. args.length > 1 && - args[1] === '-c' && - args[2].includes('import unittest') && - args[2].includes('loader = unittest.TestLoader()') + args[0] === '-c' && + args[1].includes('import unittest') && + args[1].includes('loader = unittest.TestLoader()') ) { callback({ // Ensure any spaces added during code formatting or the like are removed