我用supertest测试我的Node.js应用程序.在我的控制器中,我访问会话对象.为了生成有效请求,此会话对象需要填充一些数据.
调节器
// determine whether it is user's own profile or not
var ownProfile = userId == req.session.user._id ? true : false;
Run Code Online (Sandbox Code Playgroud)
测试
it('profile', function (done) {
testUserOne.save(function(error, user){
request
.agent(server)
.get('/profile?userId=' + user._id)
.expect('Content-Type', /html/)
.expect(200)
.expect(/Profile/)
.end(done);
})
});
Run Code Online (Sandbox Code Playgroud)
题
如何模拟req/session对象?
我读到了有关supertest 的内容。我设法测试了两条路线:
it('notAuthorized', function (done) {
request.agent(server)
.get('/notAuthorized')
.expect('Content-Type', /html/)
.expect(200)
.expect(/Not authorized!/)
.end(done)
})
it('redirect', function (done) {
request.agent(server)
.get('/no-valid-route')
.expect('Content-Type', /plain/)
.expect(302)
.expect('Location', '/notAuthorized')
.expect(/Moved Temporarily/)
.end(done)
})
Run Code Online (Sandbox Code Playgroud)
然而,当我想访问其他页面(我需要注册的页面)时,问题就出现了。我找到了这个常规注册的解决方案:
describe('When logged in', function () {
before(function (done) {
// login the user
agent
.post('/users/session')
.field('email', 'foobar@example.com')
.field('password', 'foobar')
.end(done)
})
// ...
})
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我使用证书进行注册。我可以用我的证书以某种方式配置测试吗?更改我的 https 选项也不起作用:
///////////////////
// https options
var options = {
// ...
requestCert: false,
rejectUnauthorized: false
};
Run Code Online (Sandbox Code Playgroud)
我认为这是因为我在每条路线
中使用的中间件:
exports.isAuthenticated = …Run Code Online (Sandbox Code Playgroud) 我想定义我自己的静态/方法来保存我的模型的文档.
我试过这个:
userSchema.statics.saveUser = function(data, callback){
data.save(callback);
};
Run Code Online (Sandbox Code Playgroud)
它说data.save()不是一个函数.它无法识别该功能.
然后我试了这个
userSchema.statics.saveUser = function(data, callback){
data = new userSchema(data);
data.save(callback);
};
Run Code Online (Sandbox Code Playgroud)
userSchema不是一个函数.
node.js ×4
supertest ×3
javascript ×2
certificate ×1
https ×1
mocha.js ×1
mongodb ×1
mongoose ×1
session ×1
ssl ×1