Jasmine +异步功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jasmine +异步功能相关的知识,希望对你有一定的参考价值。
这是我的代码:
'use strict';
var unitID = 0;
var getById = function(generalOptions, specificOptions) {
describe('API tests for: ' + specificOptions.name, function() {
var url = generalOptions.baseUrl + specificOptions.route;
// GET all items
it('= = = GET ALL test for ' + specificOptions.name + ' return status
code 200', function(done) {
generalOptions.request.get({
url: url
}, function(error, response, body) {
expect(response.statusCode).toBe(200);
expect(JSON.parse(body)).not.toBeFalsy();
if (specificOptions.route == '/devices/') {
var bodyJS = JSON.parse(body);
unitID = bodyJS.devices[0].id;
} else {
unitID = '';
}
console.log('Result 1 - ' + unitID);
done();
});
});
//GET by ID
it('= = = GET by ID test for ' + specificOptions.name + ' return status code 200', function(done) {
console.log('Result 2 - ' + unitID);
generalOptions.request.get({
url: url + unitID
}, function(error, response, body) {
expect(response.statusCode).toBe(200);
expect(JSON.parse(body)).not.toBeFalsy();
done();
});
});
})
};
module.exports = getById;
我需要等待,而unitID
将使用第一个GET请求进行更新,然后在下一个请求中使用。
问题是,它异步工作,第二个请求中的unitID
保持为0。
可以展示如何使用async / await或Promises实现解决方案?谢谢!
出于调试原因,我做console.log。现在打印:
Result 2 - 0
Result 1 - 59dffdgfdgfg45545g
答案
你不应该以一种测试的输出进入其他方式的方式编写测试。每个“它”应该是独立的。
相反,您应该进行两次调用(嵌套调用)以实现unitID的值,或者理想情况下,您应该模拟服务以返回“it”所期望的数据。
以上是关于Jasmine +异步功能的主要内容,如果未能解决你的问题,请参考以下文章