Jasmine - 运行 beforeAll 块串联
Jasmine - Running beforeAll blocks in series
在使用 Jasmine 测试我的 Meteor 应用程序的某个功能之前,我必须为测试准备不同的东西。因此我使用 beforeAll 块。
- 重置数据库
- 在数据库中创建讲座
- 在数据库中创建一个问题
- 转到刚刚创建的讲座页面
- 等待路由器完成路由
这些异步任务必须运行串联。我不能先去讲座页面,然后在数据库中创建它。遗憾的是 Jasmine 中的 beforeAll
块不会自动 运行 串联。
这是我当前的代码:
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
上找到
非常感谢您,
最大值
我的一般方法是有一个 beforeAll
块。
在该块内,使用承诺 API 将所有这些调用链接为承诺。
beforeAll(function(done) {
Fixtures.clearDB(done).then(...
});
beforeAll(waitForRouter);
it("....", function() {
...
});
给你:
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 我们已经完成了。希望这有帮助。
在使用 Jasmine 测试我的 Meteor 应用程序的某个功能之前,我必须为测试准备不同的东西。因此我使用 beforeAll 块。
- 重置数据库
- 在数据库中创建讲座
- 在数据库中创建一个问题
- 转到刚刚创建的讲座页面
- 等待路由器完成路由
这些异步任务必须运行串联。我不能先去讲座页面,然后在数据库中创建它。遗憾的是 Jasmine 中的 beforeAll
块不会自动 运行 串联。
这是我当前的代码:
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
上找到非常感谢您, 最大值
我的一般方法是有一个 beforeAll
块。
在该块内,使用承诺 API 将所有这些调用链接为承诺。
beforeAll(function(done) {
Fixtures.clearDB(done).then(...
});
beforeAll(waitForRouter);
it("....", function() {
...
});
给你:
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 我们已经完成了。希望这有帮助。