I&#x27;m not saying don&#x27;t test... you can write modular code in JS... in fact you can export a single function as a JS module via node&#x2F;browserify... take babel and you get es6&#x2F;7 features.  Use mocha&#x2F;chai&#x2F;sinon&#x2F;proxyquire and you can inject dependencies into your modules for testing, without having to write weird interface abstractions <i>in</i> your code...<p>References are consistent and one-way, you no longer have to deal with searching for <i>where</i> a given dependency is coming from... Or where the implementation is... references are always direct this way.<p>C#:
    using MyOrg.Base.Interfaces;<p><pre><code>    public class Foo {
      public IBar Bar {get;set;}
        
      public string Baz() {
        &#x2F;&#x2F;wth is IBar.Baz implementation come from?
        &#x2F;&#x2F;damn, now I need to search the project for IBar
        return this.Bar.Baz(this);
      }
    }
</code></pre>
JS<p><pre><code>    import bar from &#x27;..&#x2F;lib&#x2F;bar&#x27;;

    export default function baz(context) {
      return bar.baz(context);
    }
</code></pre>
In the JS case, you <i>know</i> where the implementation of bar comes from when looking into code, trying to resolve a bug.  You can also use proxyquire in order to test the module, replacing bar with a shim for the purposes of testing... in the JS case the code is still clean, and you don&#x27;t have a couple of layers of indirection abstracting you away from finding the next piece in the puzzle.  And it doesn&#x27;t limit your ability to test.