javascript - How can I mock RequireJs loader plugin responses in unit tests -


the code i'm trying test relies on requirejs loader plugins. example requirejs/text:

require(['text!templates/foo'], function (data) {   // handle loaded data }); 

for specific unit test, i'm trying mock response text!templates/foo , override 1 relevant test:

it('should load template', function (done) {    // todo: mock 'text!templates/foo' here return 'mock_data'    // templateviewer uses text plugin internally actual loading   templateviewer.templatefor('foo', function (error, templatedata) {     expect(templatedata).toequal('mock_data');     done();   });  }); 

i've looked @ requirejs dependency mock solutions, squire.js seems suited mocking regular dependencies , not plugin responses.

i've looked @ stub libraries sinon maybe replace actual require call seems problematic.

what's recommended practice? prefer not replace entire text plugin mock 1 in requirejs configuration, override of responses in specific tests.

my setup node+mocha+requirejs

edit

please see example fiddle project see issue squire:

http://runnable.com/vuboi0ex6v9gs-bj/squirejs-with-plugins-for-node-js-and-hello-world

this mock you'd requiring text!foo/x.html. plugins not special, need mock entire path, including plugin name.

var requirejs = require("requirejs"); var assert = require("assert");  requirejs.config({     baseurl: __dirname,     packages: [         {             name: "squire",             location: "node_modules/squirejs",             main: "src/squire"         }     ] });  var x; before(function (done) {     requirejs(["squire"], function (squire) {         var injector = new squire();          injector.mock("text!foo/x.html", "foo").require(["text!foo/x.html"],                                                    function (_x) {             x = _x;             done();         });     }); });  it("foo", function () {     assert.equal(x, "foo"); }); 

the problem run example code added question use global require instead of using require passed loader. should add require dependency:

define(['require', ....], function (require, ....) { 

the require module special , reserved requirejs. returns reference require function. must use it, instance, when use requirejs's contexts module loaded in specific context uses require function bound context. squirejs needs can trap calls require. global require bypasses squirejs.