我正在学习如何编写一个针对供应商的REST API的NodeJS模块。模块本身的关键代码是编写的,但现在我正试图学习如何正确地测试它。目前我正在使用MochaJS和ChaiJS作为测试框架。在一次测试中,我创建了一个返回随机ID的用户,我需要保存这个ID。然后,我想使用所述ID值并测试用户删除。如何将一个MochaJS测试的值传递给另一个?
下面是当前的代码不起作用:
var names = require('./names.json');
var ids = [];
describe('users', function() {
describe('addUser', function(){
it('should create ' + names[0].firstname, function (done){
this.slow(3000); this.timeout(10000);
api.addUser(names[0],function(x){
x.should.have.property('id').with.length.of.at.least(2);
ids.push(x.id);
done();
});
});
it('should create ' + names[1].firstname, function (done){
this.slow(3000); this.timeout(10000);
api.addUser(names[1],function(x){
x.should.have.property('activated').and.equal(true);
ids.push(x.id);
done();
});
});
});
describe('deleteUser', function(){
for(var a=0;a<ids.length;a++){
it('should delete ' + ids[a], function (done){
api.deleteUser(ids[a],function(x){
x.should.have.property('id').and.equal(ids[a]);
done();
});
});
}
});
});
即使ids
的作用范围远远超出了测试,数值不会被保存。现在我已经阅读了关于堆栈溢出的其他评论,其中响应者基本上说“不要重用值...某些事情瀑布故障”。我理解但对我来说,这是预期功能(TM)。如果由于任何原因(我的代码或供应商API)出现故障,并且我无法创建用户,那么显然我将无法删除用户。
我想把所有这些放到Travis CI中,所以我不能指望一个特定的用户将永远在那里删除,除非我的测试框架创建的是。我在供应商系统上的用户数量有限,所以我需要清理我的测试。还有其他用例(如修改现有用户),我想测试。
在beforeEach中添加用户或者在调用delete之前有什么问题? –
对于其他寻找一个更容易阅读的例子:[shakataganai/testing-mocha/test.js](https://github.com/ShakataGaNai/testing-mocha/blob/master/test.js) – Jon