gpt4 book ai didi

javascript - 如何使用 passport.js 登录的用户测试 sail.js Controller

转载 作者:行者123 更新时间:2023-11-30 12:31:04 25 4
gpt4 key购买 nike

我尝试对需要用户登录的 sail.js Controller 进行单元测试。我当前的测试是:

var request = require('supertest'),   // I try to use 'superagent', this changes nothing
user = request.agent;

describe('SomeController', function() {
// login user first of all
before(function(done) {
user(sails.hooks.http.app)
.post('/user/login')
.send({username: 'hellocat', password: '123456789'})
// request works well by itself,
// it does not return error and return normal response.
.end(function (err, res) {
// then I try to save cookies of logged in user to it agent
user(sails.hooks.http.app).saveCookies(res);
done();
});
});

// let test something
it('must return "ok" when user is logged in or "wtf" if opposite', function(done) {
user(sails.hooks.http.app)
.get('/user/me')
.end(function(err, res) {
console.log(res.body);
// no need to expect something, user is not logged in (
done();
});
});

});

Before hook 运行良好,我的用户在请求结束时登录。但在测试中它不是。在所有测试开始运行之前,我升起 sails 应用程序。不需要授权的类似测试效果很好。我猜错误可能是在 cookie 保存或对如何使用 super 测试代理的错误理解上。我做错了什么?

最佳答案

好吧,我终于找到了我的错误。 request.agent 函数不返回单例。所以每次调用user(sails.hooks.http.app)其实都是new agent和new user。为了让这个测试片段工作,我应该做这样的事情

var request = require('supertest'),
agent = request.agent;

然后在描述部分调用代理一次:

describe('SomeController', function() {

var user;

before(function(done) {
user = agent(sails.hooks.http.app);
user
.post('/user/login')
// ...
// ...

关于javascript - 如何使用 passport.js 登录的用户测试 sail.js Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com