简体   繁体   中英

Error in testing a Meteor helper function with Jasmine

I have a helper function in MeteorJS as given below:

Template.cars.helpers({
    models : function() {
        var currentUserId = Meteor.userId();
        return cars.find({userId: currentUserId});
    }
});

I am trying to write a Jasmine test which will check if the Meteor.userId() function is called once when the models helper is called. I have mocked the Meteor.userId() function,and my code is given below:

describe("test cars collection", function() {

    beforeEach(function() {
        var Meteor = {
            userId: function() {
                return 1;
            }
        };        
    });

    it("userId should be called once", function() {
        Template.cars.__helpers[' models']();
        spyOn(Meteor, 'userId').and.callThrough();
        expect(Meteor.userId.calls.count()).toBe(1);
    });
}); 

However, the result is showing Expected 0 to be 1. I am new to Jasmine and do not really know how to make the correct call to the Meteor.userId() function, while calling the models helper. I think the way I am spying on it is wrong, but I have not been able to figure it out. Can somebody help please?

From the Jasmine Docs

.calls.count() : returns the number of times the spy was called

But you need to set the spy before you call the function, so you can check if your function has been called only once like so:

it("userId should be called once", function() {
    spyOn(Meteor, 'userId').and.callThrough(); // <-- spy on the function call first
    Template.cars.__helpers[' models'](); // <-- execute the code which calls `Meteor.userId()`
    expect(Meteor.userId.calls.count()).toBe(1); // <-- Now this should work
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM