lundi 23 mars 2015

Stub a dependency function in sinon

I am using intern as testing framework and sinon for mocking the data. I dont want to hit the server for http requests during unit tests. So I have created a module that returns the data in deferred.promise as shown below:



define(["require", ..], function(require, ...) {
function fakerequest(){
dfd = new Deferred();
setTimeout(function(){
deferred.resolve(data);
},100);
return dfd.promise;
}
return fakerequest;
});


And this is the original AMD request module that hits an external server with http request:



define(["require", ..], function(require, ...) {
function request(){
dfd = new Deferred();
...
return dfd;
}
return request;
});


And this the module that I wanted to test. And it uses the request function for some data:



define(["require", ..], function(require, ...) {
var QuerySomething = {
execute: function(){
...
return request();
};
}
return QuerySomething;
});


Now I want to test the QuerySomething module but I dont want it to use the original request function but instead use the fakeRequest function. So in my intern test, I used sinon to stub the original request with the fake one.



registerSuite({
name: 'QuerySomething',

setup: function(){
stub = sinon.stub(request, "request", fakeRequest);
},

teardown: function () {
stub.restore();
},

execute: function(){
queryTask.execute(query).then(function(results){
console.log(results);
});
}


But I am getting this error:



TypeError: Attempted to wrap undefined property request as function


Can someone please let me know how to mock the dependency function?


Aucun commentaire:

Enregistrer un commentaire