我正在为正在处理的NodeJS应用程序编写一些单元测试,并且对某些单元测试逻辑有疑问。
假设应用程序为用户创建了一个“组”,然后创建了一些个人用户,然后将用户添加到该组中,这些都是异步功能(MongoDB)
我希望有一个测试用例来测试是否成功创建了该组,然后是一个单独的用例来测试用户的创建,然后是用户->帐户关联。
显然,如果组失败或用户失败,则执行用户->组关联单元测试没有任何意义。我是否应该在单元测试中编写一些逻辑以检查是否有错误(在expect(err).to.equal(null)
之后),如果错误为null,则执行其他测试用例?那是唯一对我有意义的逻辑,但是在任何其他程序包的任何单元测试中我都没有看到任何这种逻辑(我查看了一些单元测试以查看是否可以发现与此类似的东西)
另外,如果我有多个与新创建的用户交互的测试用例,那么这些测试用例中的每个都应该尝试创建一个用户,然后继续进行自己的唯一测试?还是应该尝试对其进行结构化,使其与刚创建的用户进行交互(如果成功)
例如:
describe('User', function () {
describe( '.createUser', function() {
it( 'Create user Foobar', function( done ) {
// ...
})
} )
describe( '.updateContacts', function() {
it( 'Update contacts for user Foobar', function( done ) {
// ...
})
} )
describe( '.changePassword', function() {
it( 'Change password for user Foobar', function( done ) {
// ...
})
} )
describe( '.deleteUser', function() {
it( 'Delete user Foobar', function( done ) {
// ...
})
} )
})
updateContacts
,changePassword
和deleteUser
是否都应尝试创建自己的用户进行交互?这似乎有点多余。希望我能正确解释。
最佳答案
在单元测试中的好习惯是仅在mocha之前和之后使用mocha方法插入所需的文档进行测试,也可以使用beforeEach和afterEach。您可以使用诸如sinon和httpMocks之类的库来帮助您创建间谍程序以测试异步服务的行为