【发布时间】:2017-10-01 21:30:57
【问题描述】:
我目前正在尝试使用 mocha chai 测试我的节点 api。我遇到了一个测试实际上应该失败但正在通过的场景。如果您想使用它,我有一个我正在这里构建的当前 API 的回购:enter link description here。但是,我仍然要遍历这个问题中的代码。
我正在尝试使用以下代码测试控制器:
import chai, { expect } from 'chai';
import chaiHttp from 'chai-http';
import server from '../../src/app';
chai.use(chaiHttp);
describe('Authentication Controller', () => {
const testUser = {
email_address: 'test@test.com',
password: 'test'
};
describe('login success', () => {
it('responds with status 200', done => {
chai.request(server)
.post('/api/auth/login')
.send(testUser)
.end((err, res) => {
expect(res).to.have.status(200);
done();
});
});
});
describe('login failure', () => {
it('responds with status 401', done => {
chai.request(server)
.post('/api/auth/login')
.send(testUser.email_address = 'fake@news.com')
.end((err, res) => {
expect(res).to.have.status(200);
done();
});
});
});
});
显然我想测试成功登录和失败的登录尝试。但是,来自服务器的两个响应状态都是200,这不应该是这种情况。在Postman 中测试响应状态时,当个人尝试使用不存在的电子邮件地址或不匹配的密码登录时,它返回401 的状态。如果我写一个测试
expect(1).to.equal(1) => 测试通过。
expect(1).to.equal(2) => 测试失败。
这里是处理登录请求的controller函数:
export function login(req, res) {
User.findOne({email: req.body.email})
.then(user => {
if (user && bcrypt.compareSync(req.body.password, user.password)) {
generateToken(res, user);
} else {
res.status(401).json({
success: false,
message: 'Incorrect username or password.'
});
}
})
.catch(err => {
res.json(err);
});
}
处理请求的model:
export function createUser(req) {
return db('users').insert(Object.assign(req.body,{password: hashPassword(req.body.password)}))
.then((id) => db('users').select().where('id', id).first());
}
如您所见,我使用的是Knex.js。我已经设置了一个测试数据库并且所有内容都已正确连接,所以我很困惑为什么我的服务器在测试时响应为 200 响应状态?
我只想感谢所有花时间帮助我了解 mocha chai 工作原理的人。我在测试应用程序方面经验很少,但我想开始熟悉自己这样做,因为我相信这是一种很好的做法。
【问题讨论】:
-
您是否有某种要求将您与 Mocha/Chai 联系在一起?如果没有,我建议你使用 Jest,设置简单 100 倍,测试效果更好。
-
我已回滚您的编辑以删除您添加到问题中的解决方案。请不要为您的问题添加解决方案。本网站的编辑惯例是问题应该仅是问题,而答案应该仅是答案。我看你已经有了答案。如果需要添加,您可以对其进行编辑。
-
感谢路易斯这样做!我一定会牢记这一点,继续前进。 @Baruch 不,我与 Mocha/Chai 没有任何联系。我将不得不看一下
Jest,因为如果它更简单、更容易实现,我完全不反对使用它。
标签: javascript node.js mocha.js chai web-api-testing