Access Native Node.js Modules within Intern

By  on  

Intern is an awesome unit and functional test suite from SitePen.  I've been using this utility extensively over the past year, writing tests to make sure MDN's front-end is in good shape after code merges and pushes.

Sometimes when writing tests I'll want to make use of a node module to accomplish a test task, like making an HTTP request or getting environment information.  It isn't as easy as making the same dependency path you would if you were writing a node module -- you're using the Dojo loader so you'll need to require those modules a bit differently:

define([
	'intern/dojo/node!http',
	'intern/dojo/node!process'
], function(http, process) { 

	// http and process now available from the Node.js environment

});

The dojo/node Dojo module gives your Intern test suite the ability to access native Node.js modules!

Recent Features

  • By
    How to Create a RetroPie on Raspberry Pi – Graphical Guide

    Today we get to play amazing games on our super powered game consoles, PCs, VR headsets, and even mobile devices.  While I enjoy playing new games these days, I do long for the retro gaming systems I had when I was a kid: the original Nintendo...

  • By
    I’m an Impostor

    This is the hardest thing I've ever had to write, much less admit to myself.  I've written resignation letters from jobs I've loved, I've ended relationships, I've failed at a host of tasks, and let myself down in my life.  All of those feelings were very...

Incredible Demos

  • By
    Degradable SELECT onChange

    Whenever I go to Google Analytics I notice a slight flicker in the dropdown list area. I see a button appear for the shortest amount of time and the poof! Gone. What that tells me is that Google is making their site function...

  • By
    spellcheck Attribute

    Many useful attributes have been provided to web developers recently:  download, placeholder, autofocus, and more.  One helpful older attribute is the spellcheck attribute which allows developers to  control an elements ability to be spell checked or subject to grammar checks.  Simple enough, right?

Discussion

  1. Seems like it’d be a lot easier to use the default require/exports/module style, so that your test module feels a lot more like Node. The above code could be written like so:

    define(function (require) {
      var http = require('intern/dojo/node!http');
      var process = require('intern/dojo/node!process');  
    });
    

    Still unfortunate that you have to go through intern/dojo/node but it works.

    It’s also in line with the conventions as prescribed in the Intern user guide at https://theintern.github.io/intern/#testing-commonjs-code

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!