On Fri, Mar 23, 2012 at 3:35 PM, Martin Lundberg
<[email protected]> wrote:
> Hi!
>
> I'm having problems getting up and running with testing my node.js code.

There are many ways to do this, depending, to some extent, on how you
choose to write your tests. One option would be to use Mockery with
your choice of unit testing framework:

https://github.com/mfncooper/mockery

Let's assume that your auth.js module looks more or less like this:

var users = require("./users.js");

exports.authenticate = function(email, password, callback) {
    // ...
}

Then in your unit test module (say auth.test.js), you might create a
super-simple mock / stub and use it something like this. (The actual
code will depend on which unit test framework you're using.)

var usersMock = {
    get: function (userObj, cb) {
        // Do whatever you need in your mock 'get'
    }
};

// Then in your test case code:

    setup: function () {
        mockery.enable();
        mockery.registerMock("./users.js", usersMock);
    }

    teardown: function () {
        mockery.deregisterAll();
        mockery.disable();
    }

    testAuthGet: function () {
        var auth = require("path/to/auth.js");
        // whatever other prep work you need
        auth.authenticate(email, pwd, function (err, user) {
            // whatever assertions you need to verify the results
        });
    }

This works because Mockery will load your mock / stub when auth.js
tries to require() the users.js module, so when your test calls
authenticate(), that invocation will be using your mock users.get()
instead of the real one.

Hope that helps.

--
Martin Cooper


> I've got a file called auth.js with a function that looks like:
> authenticate(email, password, callback). The authenticate function tries to
> fetch a user with the given e-mail using a collaborator UserRepository
> object. It runs a function like: user = users.get({ email: email },
> function(user) { ... }) where users is the UserRepository object. If it gets
> a user and the password is correct it calls the callback function like:
> callback(null, user) but if it don't get a user or if the password is
> incorrect it calls the callback sending an error as the first parameter.
>
> When writing unit tests the authenticate method (and all the other functions
> in auth.js) I don't want to use the real UserRepository (which in turn uses
> a database library like node-mysql) object and a real database. I believe I
> should create a stub and define return values so I can see that authenticate
> returns correct values when it gets a user and when it don't. The problems
> is that I've read a lot of tutorials and articles about mocking and testing
> but I still don't understand how I should do this in a good way.
>
> I hope the text isn't too confusing. I would really appreciate some guiding
> in this area so I can get started testing my apps in a good way.
>
> Regards,
>
> Martin Lundberg
>
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to