【问题标题】:How to test controller using mocha in Sails?如何在 Sails 中使用 mocha 测试控制器?
【发布时间】:2014-02-10 22:26:50
【问题描述】:

我的登录页面有以下Controller

// Authentication Controller
// the basics of Passport.js to work.
var AuthController = {

    // localhost:1337/login  Render the login page
    // <form role="form" action="/auth/local" method="post">
    //     <input type="text" name="identifier" placeholder="Username or Email">
    //     <input type="password" name="password" placeholder="Password">
    //     <button type="submit">Sign in</button>
    // </form>

    login: function(req, res) {
        var strategies = sails.config.passport,
            providers = {};

        // Get a list of available providers for use in templates.
        Object.keys(strategies).forEach(function(key) {
            if (key === 'local') return;
            providers[key] = {
                name: strategies[key].name,
                slug: key
            };
        });

        // Render the `auth/login.ext` view
        res.view({
            providers: providers,
            errors: req.flash('error')
        });

    },

    // Log out a user and return them to the homepage
    // Passport exposes a logout() function on req (also aliased as logOut()) that
    // can be called from any route handler which needs to terminate a login
    // session. Invoking logout() will remove the req.user property and clear the
    // login session (if any).
    logout: function(req, res) {
        req.logout();
        res.redirect('/login');
    },

    // The registration form is Just like the login form
    register: function(req, res) {
        res.view({
            errors: req.flash('error')
        });
    },

    // Create a third-party authentication endpoint
    provider: function(req, res) {
        passport.endpoint(req, res);
    },

    // Create a authentication callback endpoint
    // This endpoint handles everything related to creating and verifying Pass-
    // ports and users, both locally and from third-aprty providers.
    // Passport exposes a login() function on req (also aliased as logIn()) that
    // can be used to establish a login session. When the login operation
    // completes, user will be assigned to req.user.
    callback: function(req, res) {
        passport.callback(req, res, function(err, user) {
            req.login(user, function(err) {
                // If an error was thrown, redirect the user to the login which should
                // take care of rendering the error messages.
                if (err) {
                    res.redirect('/login');
                }
                // Upon successful login, send the user to the homepage were req.user
                // will available.
                else {
                    res.redirect('/');
                }
            });
        });
    }
};

module.exports = AuthController;

我使用Mocha 作为我的测试框架。该应用程序基于Sails。 我将如何编写 Mocha 测试用例并在提供的 Controller 上运行它们?

【问题讨论】:

    标签: javascript node.js unit-testing mocha.js sails.js


    【解决方案1】:

    我正在使用 supertest 以用户身份调用控制器,为此,首先在 before 函数中扬起帆,以便它可以被 supertest 用作服务器。

    before(function (done) {
     Sails.lift({
            // configuration for testing purposes
            log: {
                //level: 'silly'
                level: 'silent'
            },
            hooks: {
                grunt: false,
            },
        }, function (err, sails) {
    done(err, sails);
            });
    }
    

    然后用你的sails应用的url初始化supertest

    request = require('supertest');
    agent = request.agent(appurl);
    

    您现在可以像客户端一样编写测试以从前端发布/获取数据以测试您的控制器。



    it('should do the post and return whatever', function (done) {
        agent.post('/controller/function')
        .send(the_post_object_with_params)
        .end(function (err, res) {
            if (err) {
                console.log(err);
            }
            console.log(res.body); // the content 
            done();
        });
    }
    

    【讨论】:

      【解决方案2】:

      我认为主要是将sails 应用程序包含到您的测试用例中。我也没有找到控制器测试的例子,但有一些模型:

      Is it possible to use the Mocha Framework against a model in Sails.js?

      Cannot unit test my model in sailsjs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-01
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多