gpt4 book ai didi

node.js - Jasmine 测试相互依赖

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:06 25 4
gpt4 key购买 nike

我尝试使用 jasmine-node 测试来测试一些外部 API 测试。但只有基本连接有效时,运行整个测试套件才有意义。因此,这基本上意味着我需要将简单 ping 测试中的信息移交给所有其他测试。

这就是我尝试过的,但即使第一个测试通过,也不会成功:

var canConnect = false;
describe("The API client", function () {
it("can connect server", function (done) {
api.ping(function (err) {
expect(err).toBeNull();
canConnect = true;
done();
})
});

// pointless the run these if the ping didn't work
if (canConnect) describe("connected clients", function () {
it("can use the API", function (done) {
api.someOtherRequest(function(err) {
expect(err).toBeUndefined();
done();
});
})

});
})

有什么建议吗?甚至可能有一种更聪明的方法来解决这个问题?

干杯

最佳答案

我很好奇为什么你要尝试通过作为客户端调用 Api 函数来测试它们?如果您是 Api 的开发人员,似乎您应该测试 api 服务器端的功能,然后模拟它以进行客户端测试。

但是,如果您必须这样做,则可以保证 beforeEach 中的任何内容都将在每次测试之前执行。将 ping 测试放在外部 describe 中以使其首先运行,然后在嵌套 describebeforeEach 中检查连接性。

describe('first block',function(){

beforeEach(function(){
//do initialization
});

it('should do the pinging',function(){
//normally test your Api ping test here
expect('this test called first').toBe('this test called first');
});

describe('now that we have tested pinging',function(){
var canConnect;

var checkConnectible = function(){

////Normally do your api ping check here, but to demonstrate my point
////I've faked the return
//api.ping(function (err) {
//if (typeof(err) !== "undefined" && err !== null){
// return true;
//}
//return false

//to see the main point of this example
//change this faked return to false or true:
return false;
};

beforeEach(function(){
canConnect = checkConnectible();
});

it('should only be run if canConnect is true',function(){
if (canConnect){
//expect
}
else{
expect('').toBe('cannot run this test until connectible');
}
});
});
});

您可以看到,由于连接检查是在每次测试之前完成的,因此您可以根据检查结果给出不同的结果。您还可以在 checkConnectible 中执行某种超时检查,并根据情况返回 true 或 false。

关于node.js - Jasmine 测试相互依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com