1

我尝试使用 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();
            });
        })

    });
})

有什么建议么?也许甚至可以更聪明地解决这个问题?

干杯

4

1 回答 1

1

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

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

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。

于 2014-02-27T16:50:48.010 回答