Skip to content

Commit fd1101a

Browse files
author
Archish Thakkar
authored
Merge pull request #578 from browserstack/AFD-2216-fix-win-errors
fix win errors
2 parents 3179953 + 9a062f9 commit fd1101a

File tree

2 files changed

+66
-11
lines changed

2 files changed

+66
-11
lines changed

bin/helpers/readCypressConfigUtil.js

+26-8
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,20 @@ exports.convertTsConfig = (bsConfig, cypress_config_filepath, bstack_node_module
1717
const cypress_config_filename = bsConfig.run_settings.cypress_config_filename
1818
const working_dir = path.dirname(cypress_config_filepath);
1919
const complied_js_dir = path.join(working_dir, config.compiledConfigJsDirName)
20-
cp.execSync(`rm -rf ${config.compiledConfigJsDirName}`, { cwd: working_dir })
21-
cp.execSync(`mkdir ${config.compiledConfigJsDirName}`, { cwd: working_dir })
20+
if (fs.existsSync(complied_js_dir)) {
21+
fs.rmdirSync(complied_js_dir, { recursive: true })
22+
}
23+
fs.mkdirSync(complied_js_dir, { recursive: true })
24+
25+
const typescript_path = path.join(bstack_node_modules_path, 'typescript', 'bin', 'tsc')
2226

23-
let tsc_command = `NODE_PATH=${bstack_node_modules_path} ${bstack_node_modules_path}/typescript/bin/tsc --outDir ${complied_js_dir} --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false ${cypress_config_filepath}`
27+
let tsc_command = `NODE_PATH=${bstack_node_modules_path} node "${typescript_path}" --outDir "${complied_js_dir}" --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false "${cypress_config_filepath}"`
28+
29+
if (/^win/.test(process.platform)) {
30+
tsc_command = `set NODE_PATH=${bstack_node_modules_path}&& node "${typescript_path}" --outDir "${complied_js_dir}" --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false "${cypress_config_filepath}"`
31+
}
32+
33+
2434
let tsc_output
2535
try {
2636
logger.debug(`Running: ${tsc_command}`)
@@ -54,8 +64,13 @@ exports.convertTsConfig = (bsConfig, cypress_config_filepath, bstack_node_module
5464
}
5565

5666
exports.loadJsFile = (cypress_config_filepath, bstack_node_modules_path) => {
57-
const require_module_helper_path = `${__dirname}/requireModule.js`
58-
cp.execSync(`NODE_PATH=${bstack_node_modules_path} node ${require_module_helper_path} ${cypress_config_filepath}`)
67+
const require_module_helper_path = path.join(__dirname, 'requireModule.js')
68+
let load_command = `NODE_PATH="${bstack_node_modules_path}" node "${require_module_helper_path}" "${cypress_config_filepath}"`
69+
if (/^win/.test(process.platform)) {
70+
load_command = `set NODE_PATH=${bstack_node_modules_path}&& node "${require_module_helper_path}" "${cypress_config_filepath}"`
71+
}
72+
logger.debug(`Running: ${load_command}`)
73+
cp.execSync(load_command)
5974
const cypress_config = JSON.parse(fs.readFileSync(config.configJsonFileName).toString())
6075
if (fs.existsSync(config.configJsonFileName)) {
6176
fs.unlinkSync(config.configJsonFileName)
@@ -67,7 +82,7 @@ exports.readCypressConfigFile = (bsConfig) => {
6782
const cypress_config_filepath = path.resolve(bsConfig.run_settings.cypressConfigFilePath)
6883
try {
6984
const cypress_config_filename = bsConfig.run_settings.cypress_config_filename
70-
const bstack_node_modules_path = `${path.resolve(config.packageDirName)}/node_modules`
85+
const bstack_node_modules_path = path.join(path.resolve(config.packageDirName), 'node_modules')
7186
const conf_lang = this.detectLanguage(cypress_config_filename)
7287

7388
logger.debug(`cypress config path: ${cypress_config_filepath}`);
@@ -92,7 +107,10 @@ exports.readCypressConfigFile = (bsConfig) => {
92107
null
93108
)
94109
} finally {
95-
const working_dir = path.dirname(cypress_config_filepath);
96-
cp.execSync(`rm -rf ${config.compiledConfigJsDirName}`, { cwd: working_dir })
110+
const working_dir = path.dirname(cypress_config_filepath)
111+
const complied_js_dir = path.join(working_dir, config.compiledConfigJsDirName)
112+
if (fs.existsSync(complied_js_dir)) {
113+
fs.rmdirSync(complied_js_dir, { recursive: true })
114+
}
97115
}
98116
}

test/unit/bin/helpers/readCypressConfigUtil.js

+40-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
const chai = require("chai"),
33
expect = chai.expect,
44
sinon = require("sinon"),
5+
path = require('path'),
56
EventEmitter = require('events');
67

78
const logger = require("../../../../bin/helpers/logger").winstonLogger;
@@ -40,14 +41,33 @@ describe("readCypressConfigUtil", () => {
4041

4142
describe('loadJsFile', () => {
4243
it('should load js file', () => {
43-
sandbox.stub(cp, "execSync").returns("random string");
44+
const loadCommandStub = sandbox.stub(cp, "execSync").returns("random string");
4445
const readFileSyncStub = sandbox.stub(fs, 'readFileSync').returns('{"e2e": {}}');
4546
const existsSyncStub = sandbox.stub(fs, 'existsSync').returns(true);
4647
const unlinkSyncSyncStub = sandbox.stub(fs, 'unlinkSync');
48+
const requireModulePath = path.join(__dirname, '../../../../', 'bin', 'helpers', 'requireModule.js');
4749

4850
const result = readCypressConfigUtil.loadJsFile('path/to/cypress.config.ts', 'path/to/tmpBstackPackages');
4951

5052
expect(result).to.eql({ e2e: {} });
53+
sinon.assert.calledOnceWithExactly(loadCommandStub, `NODE_PATH="path/to/tmpBstackPackages" node "${requireModulePath}" "path/to/cypress.config.ts"`);
54+
sinon.assert.calledOnce(readFileSyncStub);
55+
sinon.assert.calledOnce(unlinkSyncSyncStub);
56+
sinon.assert.calledOnce(existsSyncStub);
57+
});
58+
59+
it('should load js file for win', () => {
60+
sinon.stub(process, 'platform').value('win32');
61+
const loadCommandStub = sandbox.stub(cp, "execSync").returns("random string");
62+
const readFileSyncStub = sandbox.stub(fs, 'readFileSync').returns('{"e2e": {}}');
63+
const existsSyncStub = sandbox.stub(fs, 'existsSync').returns(true);
64+
const unlinkSyncSyncStub = sandbox.stub(fs, 'unlinkSync');
65+
const requireModulePath = path.join(__dirname, '../../../../', 'bin', 'helpers', 'requireModule.js');
66+
67+
const result = readCypressConfigUtil.loadJsFile('path/to/cypress.config.ts', 'path/to/tmpBstackPackages');
68+
69+
expect(result).to.eql({ e2e: {} });
70+
sinon.assert.calledOnceWithExactly(loadCommandStub, `set NODE_PATH=path/to/tmpBstackPackages&& node "${requireModulePath}" "path/to/cypress.config.ts"`);
5171
sinon.assert.calledOnce(readFileSyncStub);
5272
sinon.assert.calledOnce(unlinkSyncSyncStub);
5373
sinon.assert.calledOnce(existsSyncStub);
@@ -62,11 +82,28 @@ describe("readCypressConfigUtil", () => {
6282
cypress_config_filename: 'cypress.config.ts'
6383
}
6484
};
65-
sandbox.stub(cp, "execSync").returns("TSFILE: path/to/compiled/cypress.config.js");
85+
const compileTsStub = sandbox.stub(cp, "execSync").returns("TSFILE: path/to/compiled/cypress.config.js");
86+
87+
const result = readCypressConfigUtil.convertTsConfig(bsConfig, 'path/to/cypress.config.ts', 'path/to/tmpBstackPackages');
88+
89+
expect(result).to.eql('path/to/compiled/cypress.config.js');
90+
sinon.assert.calledOnceWithExactly(compileTsStub, `NODE_PATH=path/to/tmpBstackPackages node "path/to/tmpBstackPackages/typescript/bin/tsc" --outDir "path/to/tmpBstackCompiledJs" --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false "path/to/cypress.config.ts"`, { cwd: 'path/to' });
91+
});
92+
93+
it('should compile cypress.config.ts to cypress.config.js for win', () => {
94+
sinon.stub(process, 'platform').value('win32');
95+
const bsConfig = {
96+
run_settings: {
97+
cypressConfigFilePath: 'path/to/cypress.config.ts',
98+
cypress_config_filename: 'cypress.config.ts'
99+
}
100+
};
101+
const compileTsStub = sandbox.stub(cp, "execSync").returns("TSFILE: path/to/compiled/cypress.config.js");
66102

67103
const result = readCypressConfigUtil.convertTsConfig(bsConfig, 'path/to/cypress.config.ts', 'path/to/tmpBstackPackages');
68104

69105
expect(result).to.eql('path/to/compiled/cypress.config.js');
106+
sinon.assert.calledOnceWithExactly(compileTsStub, `set NODE_PATH=path/to/tmpBstackPackages&& node "path/to/tmpBstackPackages/typescript/bin/tsc" --outDir "path/to/tmpBstackCompiledJs" --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false "path/to/cypress.config.ts"`, { cwd: 'path/to' });
70107
});
71108

72109
it('should return null if compilation fails', () => {
@@ -92,7 +129,7 @@ describe("readCypressConfigUtil", () => {
92129
};
93130
const execSyncStub = sandbox.stub(cp, "execSync")
94131
execSyncStub
95-
.withArgs(`NODE_PATH=path/to/tmpBstackPackages path/to/tmpBstackPackages/typescript/bin/tsc --outDir path/to/tmpBstackCompiledJs --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false path/to/cypress.config.ts`, { cwd: 'path/to' })
132+
.withArgs(`NODE_PATH=path/to/tmpBstackPackages node "path/to/tmpBstackPackages/typescript/bin/tsc" --outDir "path/to/tmpBstackCompiledJs" --listEmittedFiles true --allowSyntheticDefaultImports --module commonjs --declaration false "path/to/cypress.config.ts"`, { cwd: 'path/to' })
96133
.throws({
97134
output: Buffer.from("Error: Some Error \n TSFILE: path/to/compiled/cypress.config.js")
98135
});

0 commit comments

Comments
 (0)