meteorjasminemeteor-velocitymeteor-jasmine

Unit tests in meteor can't find the code they need to test


I'm struggling with unit tests in Meteor. I want to use the velocity, jasmine package but I must be doing something wrong. The tests don"t seem to work because the test can't find the code to test. The test project is available on github.

The code that i want to test is here: https://github.com/robvanpamel/coderepository/blob/master/meteor/sandwich-app/server/Services/SandwichService.js

The unit Test is here: https://github.com/robvanpamel/coderepository/blob/master/meteor/sandwich-app/tests/jasmine/server/integration/spec/SandwichServiceSpec.js When I uncomment the created SandwichService in the Unit Test, the test works, which is normal.

I haven't done any configuration elsewhere in meteor, and i think that is the problem. Do you have to put a package.js file where you specify your source code? How can Jasmine know where it can find the SandwichService I'm trying to test? It is also the error i get. "ReferenceError: SandwichesService is not defined "

EDIT

I was able to resolve it and updated the code repository in GitHub. The key was not to use the Javascript prototypes. so the below will not work

function SandwichesService(){};

SandwichesService.prototype.listSandwiches = function() {
  // do stuff here
}

while the code below does work

SandwichService = {
  listSandwiches: function(){
      // do stuff here
  }
};

I don't really understand why? Does somebody can tell me?

Kind regards and thanks upfront! Rob


Solution

  • This is a Meteor issue not a testing issue :)

    You need to put the SandwichesService on the global namespace. Your second block does that by default.

    Try:

    SandwichService = new SandwichesService()

    (don't use var)