我一直在努力在代码中添加相当数量的单元测试。然而,我发现自己在很大程度上违背了枯燥的原则。
我目前正在使用以下文件夹结构中的测试在API上运行测试:
/user
user.model.js
user.test.js
....
/blog
blog.model.js
blog.test.js
....我一直在脚本测试路径中使用通配符来锁定我的所有测试文件nodemon --exec 'mocha ../api/resources/**/*.test.js'
我注意到我所有的测试文件都有很多需要的东西。大多数测试文件在每个测试文件中都是相同的,例如:
const chai = require('chai')
const chaiHttp = require('chai-http')
const { expect } = chai
const app = require('../../../app')
const { dropDb } = require('../../../test/helpers')
const mongoose = require('mongoose')
const User = mongoose.model('user')
chai.use(chaiHttp)我的测试中有很多重复的“expect”语句
it('should return error when no user email found', async () => {
const result = await chai.request(app)
.post('/api/user/login')
.send({ email: 'fail@email.com', password: currentUserData.password })
*expect(result).to.have.status(401)
expect(result.error).to.exist
expect(result.error.text).to.contain('No user found')*
})
it('should return error when password is incorrect', async () => {
const result = await chai.request(app)
.post('/api/user/login')
.send({ email: currentUserData.email, password: '123456' })
*expect(result).to.have.status(401)
expect(result.error).to.exist
expect(result.error.text).to.contain('Incorrect password')*
})从上面的测试中可以看到,expect语句基本上是相同的,减去文本。我还有很多其他的测试,我希望检查能确保它的JSON数据或200在更具体的期望之前。
对我来说,这感觉好像我在要求和期望语句上重复了很多次。这是标准实践吗?或者我可以创建某种更高级的函数来运行测试,而不必一直要求。
此外,我是否可以重用一个函数,其中包含类似的expect语句?
发布于 2018-08-11 12:45:59
推荐的测试技术之一是将重构转换为assert方法。重复会导致脆弱的测试。
您还应该尝试为SUT创建工厂方法。
it('should return error when password is incorrect', async () => {
// Arrange
const aValidEmail = currentUserData.email
const aWrongPassword = '123456'
// Act
const result = await makeLoginRequest(aValidEmail, aWrongPassword)
// Assert
expectErrorResult(401, 'Incorrect password')
})编辑:最后,makeLoginRequest()不是一个工厂方法,但它可能是这种类型SUT的等效方法。我们在这里试图实现的是避免在SUT修改其接口时修改测试(比如端点或添加/删除不相关的参数)。
https://codereview.stackexchange.com/questions/201429
复制相似问题