javascript - Bcrypt.compare 不在 chai/mocha 测试中执行,而是在代码中执行
问题描述
我的项目中有一些 node.js 后端。要加密密码,我使用bcrypt。要将来自请求的字符串密码与 DB 中的哈希密码进行比较,我使用 bcrypt.compare 函数。我的 bcrypt.compare 函数在代码中运行良好。我用 Postman 手动测试了它,它在生产中运行良好。但是在使用chai-http和mocha的测试中它挂断了。
测试。我使用 mocha 和 chai-http 发出 http POST 请求:
describe('Testing login', () => {
it('should return status 200 when there is such user in DB and password is correct', (done) => {
chai.request(server)
.post('/login')
.send({
login: 'test@test.test',
password: 'somepassword'
})
.end((err, res) => {
res.should.have.status(200)
done()
})
})
})
控制器 bcrypt 函数如下所示:
async function auth (req, res) {
let { login, password } = req.body
try {
let payload = {}
let result = {}
await
User.findOne({ where: { userEmail: login } }).then(user => {
return result = user
})
bcrypt.compare(password, result.dataValues.password, await function (err, data) {
if (err) {
throw Error(err)
}
if (result && data) {
payload.isAdmin = result.dataValues.isAdmin
payload.ID = result.dataValues.id
let token = jwt.sign(payload, 'yoursecret')
res.status(200).send({ token: token })
} else { res.status(401) }
})
} catch (error) {
res.sendStatus(500)
}
}
有什么方法可以测试这个功能吗?
附加信息
mocha 版本 5.2.0 - 全局和本地
节点 v8.11.4
windows 10 x64
"devDependencies": {
"@types/chai-as-promised": "^7.1.0",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"chai-http": "^4.2.0",
"eslint": "^5.5.0",
"eslint-config-standard": "^12.0.0",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-node": "^7.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0",
"express-unit": "^2.1.1",
"mocha": "^5.2.0",
"mock-express-request": "^0.2.2",
"mock-express-response": "^0.2.2",
"nyc": "^13.0.1",
"proxyquire": "^2.1.0",
"sinon": "^6.2.0",
"supertest": "^3.3.0",
"ws": "3.3.2"
}
解决方案
错误行为与 chai/mocha/bcript 无关。这是由以下语句引起的
} else {
res.status(401)
}
正确的代码应该是
} else {
res.status(401).send(something)
}
或者
} else {
res.sendStatus(401)
}
我认为 Express 在 .status() 之后等待 .send() 并保持连接而没有响应
推荐阅读
- parquet - 使用 Apache-Drill 查询镶木地板文件时出错:镶木地板记录读取器中的错误
- sql - 从字符串中选择列
- indexeddb - 在 IndexedDB 中调用 add 或 put 时如何找出导致 ConstraintError 的索引?
- javascript - 如何判断表单是否有效并根据是否有效显示弹出窗口?
- time-complexity - 嵌套for循环是否自动O(n ^ 2)?
- android - 如何“等待”来自 API 的数据
- c# - 如何在c#中禁用按钮颜色
- javascript - 检索 JSON 数据并记录特定值
- node.js - Nodejs Express - 如何在 package.json 中设置 max-old-space-size?
- permissions - 授权权限和 UI 元素可见性——如何干净利落地实现?