问题描述
路由是受保护的路由,允许用户在用户通过身份验证时创建供应商。
我在向“api/v1/supplier”(受保护的路由)路由发出请求之前尝试登录用户,但在调用登录 API 之前无法登录用户返回 500 错误,登录 API 正在按预期工作单独测试时。
这是我正在尝试的测试。请求帮助!
process.env.NODE_ENV = 'development';
const expect = require('chai').expect;
const request = require('supertest');
const app = require('../../../app.js');
const conn = require('../../../db/index.js');
describe('POST /api/v1/supplier ',() => {
let token = '';
before(done => {
conn
.connect()
.then(done())
.catch(err => done(err));
});
after(done => {
conn
.close()
.then(done())
.catch(err => done(err));
});
it('Error,on unauthorized POST supplier request',done => {
request(app)
.post('/api/v1/users/login')
.send({ email: 'sgrmhdk00@gmail.com',password: '12345678' })
.end(function(err,res) {
token = res.body.token;
});
request(app)
.post('/api/v1/supplier')
.set('Authorization','Bearer' + token)
.send({ supplierID: '1234567' })
.then(res => {
const body = res.body;
expect(body).to.contain.property('status');
expect(body).to.contain.property('error');
done();
})
.catch(err => done(err));
});
});
db/index.js
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const DB_URI = 'mongodb://localhost:27017/myapp';
function connect() {
return new Promise((resolve,reject) => {
dotenv.config({ path: './config.env' });
const setDatabase = () => {
if (process.env.NODE_ENV === 'development') {
const DB = process.env.DATABASE;
return DB;
} else {
const DB = process.env.DATABASE_PRODUCTION.replace(
'<PASSWORD>',process.env.DATABASE_PASSWORD
);
return DB;
}
};
const DB = setDatabase();
mongoose
.connect(DB,{
useNewUrlParser: true,useCreateIndex: true,useFindAndModify: false
})
.then(() => console.log('DB connection successful!'));
});
}
function close() {
return mongoose.disconnect();
}
module.exports = { connect,close };
解决方法
你需要用token调用你的API,但是这两个调用是异步的,你需要在第一个方法的末尾调用第二个方法:
it('Error,on unauthorized POST Supplier request',done => {
request(app)
.post('/api/v1/users/login')
.send({ email: 'sgrmhdk00@gmail.com',password: '12345678' })
.end(function(err,res) {
if(err){
done(err)
return
}
token = res.body.token;
request(app)
.post('/api/v1/supplier')
.set('Authorization','Bearer' + token)
.send({ supplierID: '1234567' })
.then(res => {
const body = res.body;
expect(body).to.contain.property('status');
expect(body).to.contain.property('error');
done();
})
.catch(err => done(err));
});
});