Jasmine - Running beforeAll blocks in series
在用Jasmine测试我的Meteor应用程序的某些功能之前,我必须为测试准备不同的东西。因此,我使用beforeAll块。
这些异步任务必须连续运行。我不能先进入讲座页面,然后在数据库中创建它。不幸的是,Jasmine中的
这是我当前的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | beforeAll(function(done) { Fixtures.clearDB(done); }); beforeAll(function(done) { Fixtures.createLecture({}, function(error, result) { lectureCode = result; done(); }); }); beforeAll(function(done) { Fixtures.createQuestion({}, done); }); beforeAll(function(done) { Router.go('lecturePage', {lectureCode: lectureCode}); Tracker.afterFlush(done); }); beforeAll(waitForRouter); it("....", function() { ... }); |
如何在不使用回调地狱的情况下以漂亮的样式在Jasmine中编写此代码?
整个应用程序的源代码是开源的,可以在GitHub上找到
非常感谢您,
最大
您在这里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | beforeAll(function(done) { async.series([ function(callback) { Fixtures.clearDB(callback) }, function(callback) { Fixtures.createLecture({}, function(error, result) { lectureCode = result; callback(); }); }, function(callback) { Fixtures.createQuestion({}, callback); }, function(callback) { Router.go('lecturePage', {lectureCode: lectureCode}); Tracker.afterFlush(callback); }],function(err, results){ // callback called when all tasks are done done(); }); } |
我尚未测试过,但希望您有个好主意。您需要创建函数列表,每个函数都将提供回调函数,您需要调用该回调函数以使下一个函数运行。在最后一个回调被调用之后,我们可以在其中调用done()告诉jasmine我们已经完成了。希望这会有所帮助。
我的一般方法是只有一个
在该块内,使用promise API将所有这些调用链接为promises。
1 2 3 4 5 6 7 8 9 | beforeAll(function(done) { Fixtures.clearDB(done).then(... }); beforeAll(waitForRouter); it("....", function() { ... }); |