Repository: ember-cli/ember-try (js)

Issue:
Allow scenarios without dependency changes
Currently, [the `ScenarioManager` checks to ensure that there are dependency managers](https://github.com/ember-cli/ember-try/blob/master/lib/utils/scenario-manager.js#L15) which are only created if you specify [some sort of dependency change](https://github.com/ember-cli/ember-try/blob/master/lib/utils/dependency-manager-adapter-factory.js#L16-L21) in your scenarios.

However, I have [a use-case](https://github.com/trentmwillis/ember-exam/issues/41) where I would like to run multiple different scenarios without changing any dependencies. This currently results in a `No dependency manager adapter` error being thrown. I can workaround this by specifying an empty dependency change (e.g., `npm: {}`), but this feels hacky.

So, I have two questions:
1. Why is there a requirement that dependency managers must be present currently?
2. Can we remove that requirement? It seems like answer should be yes since I can hack around it now anyway.


Pull request:
Remove requirement to have dependency managers.
Fixes #81 

Patch:
diff --git a/lib/utils/scenario-manager.js b/lib/utils/scenario-manager.js
index f8aeb73..49ad257 100644
--- a/lib/utils/scenario-manager.js
+++ b/lib/utils/scenario-manager.js
@@ -3,17 +3,6 @@
 const CoreObject = require('core-object');
 
 module.exports = CoreObject.extend({
-  init() {
-    this._super.apply(this, arguments);
-    this._checkDependencyManagerAdapters();
-  },
-
-  _checkDependencyManagerAdapters() {
-    if (!this.dependencyManagerAdapters || this.dependencyManagerAdapters.length === 0) {
-      throw new Error('No dependency manager adapter');
-    }
-  },
-
   async setup() {
     let { ui } = this;
 


Test patch:
diff --git a/test/tasks/try-each-test.js b/test/tasks/try-each-test.js
index 2a2f5c2..cc1b649 100644
--- a/test/tasks/try-each-test.js
+++ b/test/tasks/try-each-test.js
@@ -160,6 +160,64 @@ describe('tryEach', () => {
     });
   });
 
+  describe('with no dependency managers', () => {
+    it('runs properly', async () => {
+      let config = {
+        scenarios: [
+          {
+            name: 'first',
+            command: 'foo-bar',
+          },
+          {
+            name: 'second',
+            command: 'baz-qux',
+          },
+        ],
+      };
+
+      let steps = [];
+      let mockedRun = generateMockRun([
+        {
+          command: 'foo-bar',
+          async callback() {
+            steps.push('foo-bar ran');
+
+            return 0;
+          },
+        },
+        {
+          command: 'baz-qux',
+          async callback() {
+            steps.push('baz-qux ran');
+
+            return 0;
+          },
+        },
+      ]);
+      mockery.registerMock('./run', mockedRun);
+
+      let output = [];
+      let outputFn = function (log) {
+        output.push(log);
+      };
+
+      let TryEachTask = require('../../lib/tasks/try-each');
+      let tryEachTask = new TryEachTask({
+        ui: { writeLine: outputFn },
+        project: { root: tmpdir },
+        config,
+        dependencyManagerAdapters: [],
+        _on() {},
+      });
+
+      let exitCode = await tryEachTask.run(config.scenarios, {});
+
+      expect(exitCode).to.equal(0, 'exits 0 when all scenarios succeed');
+      expect(output).to.include('Scenario first: SUCCESS');
+      expect(steps).to.deep.equal(['foo-bar ran', 'baz-qux ran']);
+    });
+  });
+
   describe('with stubbed dependency manager', () => {
     it('passes along timeout options to run', function () {
       // With stubbed dependency manager, timing out is warning for accidentally not using the stub
diff --git a/test/utils/scenario-manager-test.js b/test/utils/scenario-manager-test.js
index 3659216..8e23dac 100644
--- a/test/utils/scenario-manager-test.js
+++ b/test/utils/scenario-manager-test.js
@@ -6,6 +6,10 @@ const CoreObject = require('core-object');
 const RSVP = require('rsvp');
 
 describe('scenarioManager', () => {
+  it('does not require any dependency managers', () => {
+    new ScenarioManager({ dependencyManagerAdapters: [] });
+  });
+
   describe('#setup', () => {
     it('sets up each of the dependency managers', () => {
       let calledFirstAdapter = false;