Skip to content

Commit 85d4de7

Browse files
author
Robert Jackson
committed
Avoid issues when running against nested modules.
1 parent 5d73528 commit 85d4de7

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

ember-qunit-codemod.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,19 @@ module.exports = function(file, api, options) {
144144
function parseModule(p) {
145145
let calleeName = p.node.expression.callee.name;
146146
// Find the moduleName and the module's options
147-
let moduleName, subject, options, hasCustomSubject;
147+
let moduleName, subject, options, hasCustomSubject, isNestedModule;
148148
let calleeArguments = p.node.expression.arguments.slice();
149149
let lastArgument = calleeArguments[calleeArguments.length - 1];
150150
if (lastArgument.type === 'ObjectExpression') {
151151
options = calleeArguments.pop();
152152
}
153-
moduleName = calleeArguments[1] || calleeArguments[0];
154-
subject = calleeArguments[0];
153+
if (calleeArguments[1] && j.match(calleeArguments[1], { type: 'FunctionExpression' })) {
154+
isNestedModule = true;
155+
moduleName = calleeArguments[0];
156+
} else {
157+
moduleName = calleeArguments[1] || calleeArguments[0];
158+
subject = calleeArguments[0];
159+
}
155160

156161
let setupIdentifier = calleeName === 'module' ? null : 'setupTest';
157162
if (options) {
@@ -171,7 +176,7 @@ module.exports = function(file, api, options) {
171176
hasCustomSubject = options.properties.some(p => p.key.name === 'subject');
172177
}
173178

174-
return [moduleName, options, setupIdentifier, subject, hasCustomSubject];
179+
return [moduleName, options, setupIdentifier, subject, hasCustomSubject, isNestedModule];
175180
}
176181

177182
function updateModuleForToNestedModule() {
@@ -198,7 +203,13 @@ module.exports = function(file, api, options) {
198203
}
199204

200205
function createModule(p) {
201-
let [moduleName, options, setupType, subject, hasCustomSubject] = parseModule(p);
206+
let [moduleName, options, setupType, subject, hasCustomSubject, isNestedModule] = parseModule(
207+
p
208+
);
209+
210+
if (isNestedModule) {
211+
return null;
212+
}
202213

203214
let needsHooks = false;
204215
let moduleSetupExpression;
@@ -447,6 +458,9 @@ module.exports = function(file, api, options) {
447458
let expression = expressionPath.node;
448459
if (isModuleDefinition(expressionPath)) {
449460
let result = createModule(expressionPath);
461+
if (result === null) {
462+
return;
463+
}
450464
expressionPath.replace(result[0]);
451465
currentModuleCallbackBody = result[1];
452466
currentTestType = result[2];

0 commit comments

Comments
 (0)