我的测试中有这些API调用,需要先运行,这样我就可以将响应存储在一个变量中,供以后使用。但是看起来我的测试是异步运行的,所以第二个测试在填充变量之前就完成了。如何使测试同步运行?
我听说过一种方法是使用before并传递done回调。但我不知道如何用jasmine-node实现这一点。
测试示例:
var dataID = '';
frisby.create('Get ID')
.get(url)
.expectStatus(200)
.afterJSON(function(json) {
dataID = json.id;
})
.toss();
frisby.create('Get data with ID')
.get(url, id)
.expectStatus(200)
.expectJSON({"id": dataID})
.toss();编辑:
所以我试着像这样做我的测试,done()回调似乎没有被调用。(测试超时)
describe('API TEST', function() {
beforeEach(function(done) {
frisby.create('Get ID')
.get(url)
.expectStatus(200)
.afterJSON(function(json) {
dataID = json.id;
done(); //?
})
.toss()
});
it('should work', function() {
console.log('TEST');
}); //"timed out after 5000 msec waiting for spec to complete"
});发布于 2016-03-08 21:24:05
我最后所做的是使用async库并在实际的frisby测试上执行.timeout(60000),如下所示:
async.series([
function(cb) {
frisby.create('Get ID')
.get(url)
.expectStatus(200)
.afterJSON(function(json) {
dataID = json.id;
cb();
})
.toss();
},
function() {
//other tests using id
}
]);发布于 2016-03-04 18:41:31
Jasmine通过将一个特殊的done参数作为参数传递给测试函数来处理异步测试--当异步部分完成时,您必须调用done (即done())。
下面是一个使用done的示例测试:
describe('my test', function() {
it('completes on done', function(done) {
var a = 10;
// this would normally be a call to the code under test
setTimeout(function() {
a = 20;
}, 250);
setTimeout(function() {
expect(a).toEqual(20);
done();
}, 1000);
});
});就frisby.js而言,异步测试似乎仍然是一个令人惊讶的问题。见关于github回购的问题:
发布于 2016-06-27 23:08:15
现在有点晚了,但万一其他人也有同样的问题。您可以像这样将第二个测试嵌套到第一个测试的afterJson()中,以确保它在完成第一个测试之后运行。
frisby.create('Get ID')
.get(url)
.expectStatus(200)
.afterJSON(function(json) {
var dataID = json.id;
frisby.create('Get data with ID')
.get(url, id)
.expectStatus(200)
.expectJSON({"id": dataID})
.toss()
})
.toss();https://stackoverflow.com/questions/35803415
复制相似问题