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.