-
Notifications
You must be signed in to change notification settings - Fork 26
Description
I discovered this issue in Quibble 0.6.14 on my Windows developer machine.
I wrote a test case that is supposed to fake an inner dependency, like this:
// logic.js
const lwa = require("./login-with-aws"); // a local js file
module.exports.login = async (request, reply) => {
return await lwa.retrieveProfile(request.body.accessToken);
};
// test-logic.js
let lwa;
let logic;
describe("handler", () => {
beforeEach(async () => {
lwa = td.replace("../src/login-with-aws");
logic = require("../src/logic");
});
it("should login", async () => {
td.when(lwa.retrieveProfile(td.matchers.anything())).thenResolve({ user_id: "xyz" });
const profile = await logic.login({ body: { accessToken: "1234" } });
console.log(profile);
});
});
When logic executes, it does not use a fake/stub but the real implementation. I tracked the problem down to the following...
The require("./login-with-aws") call from logic.js eventually reaches the fakeload() method in quibble.js. After the quibble.absolutify() call, the path looks like this: C:\\Home\\my-project\\src\\logic.js
Note the upper-case drive and folder names.
Inside stubbingThatMatchesRequest(), the stubbedPath variable starts with a lower-case drive letter, though, like c:\\Home\\my-project\\src\\login-with-aws.js, and therefore the fake/stub lookup fails. A quick fix for this problem looks like this...
var stubbingThatMatchesRequest = function (request) {
request = request.toLowerCase();
return _.ooFind(quibbles, function (stubbing, stubbedPath) {
if (request === stubbedPath.toLowerCase()) return true
if (nodeResolve(request) === stubbedPath) return true
}, quibbles)
}
...but 1) this is ugly and probably the quibbles keys should already be added in lower-case format, 2) my quick and dirty fix could result in issues on Linux, which has a case-sensitive file system, and 3) there are probably more platform (Windows) specific issues in quibble, as I came across some strange behavior of testdouble, too.