Jasmine JavaScript测试 - 等待功能测试完成

时间:2016-12-20 08:49:18

标签: javascript testing automation jasmine automated-tests

我正在尝试Jasmine来自动化我的JavaScript测试。我只是找不到关于一件事的信息(这是我想要做的步骤):

  1. 登录服务。 (返回SUCCESS或FAILED)

  2. 建立与服务器的连接。 (返回SUCCESS或FAILED)

  3. 进行测试SIP呼叫。 (返回SUCCESS或FAILED)

  4. 基于SUCCESS / FAILED,我的规范(场景)失败或通过。

    测试这3件事的问题:每件事都需要时间,特别是3号。到目前为止,我已经尝试了Jasmine并且可以弄清楚如何进行这样的顺序测试,所以每一步(测试)都有完成下一个开始。也许有一个更好的框架来做到这一点?我只测试JavasScript,而不是界面(按钮,文本字段等)。

    这是我的基本情景:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>Jasmine Spec Runner v2.5.2</title>
    
        <!-- voxImplant stuff-->
        <script type="text/javascript" src="http://cdn.voximplant.com/voximplant.min.js"></script>
    
        <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.5.2/jasmine_favicon.png">
        <link rel="stylesheet" href="lib/jasmine-2.5.2/jasmine.css">
    
        <script src="lib/jasmine-2.5.2/jasmine.js"></script>
        <script src="lib/jasmine-2.5.2/jasmine-html.js"></script>
        <script src="lib/jasmine-2.5.2/boot.js"></script>
    
        <!-- include source files here... -->
        <script src="src/voximp_src.js"></script>    
    
    
        <!-- include spec files here... -->
        <script src="spec/voximp_spec.js"></script>
    
    </head>
    
    <body>     
    </body>
    
    </html>

    // Make a test call to play MP3
    describe("[VoxEngine Basic Call Test]", function () {
        it('does something', function (done) {
            VoxEngine.Login_to_a_service()
                .then(VoxEngine.Establish_a_connection)
                .then(VoxEngine.Make_a_test_call)
                .then(function () {
                    expect(1).toEqual("SUCCESS");
                    done();
                })
                .catch(fail)
        });    
    });

    window.VoxEngine = {
        Login_to_a_service: function () {        
            // Sleep
            var now = new Date().getTime();
            while (new Date().getTime() < now + 2000) { console.log("Login processing"); }
    
            console.log("Login done");
            return "SUCCESS";
        },
    
        Establish_a_connection: function () {
            // Sleep
            var now = new Date().getTime();
            while (new Date().getTime() < now + 2000) { console.log("Connection processing"); }
    
            console.log("Connection done");
            return "SUCCESS";
        },
    
        Make_a_test_call: function () {
            // Sleep
            var now = new Date().getTime();
            while (new Date().getTime() < now + 2000) { console.log("Call processing"); }
    
            console.log("call failed");
            return "FAIL";
        }
    }

    Result for this template

    所以基本上,我需要确保它们一个接一个地运行,而下一个运行在前一个完成之后运行。假设Make-A-Test-Call已经完成,然后测试Connection-To-The-Server-Closed是否成功。

1 个答案:

答案 0 :(得分:0)

基本上,您在测试用例中获取done参数,并在异步任务完成时调用它:

it('does something', function(done) {
    Login_to_a_service()
        .then(Establish_a_connection)
        .then(Make_a_test_call)
        .then(function() {
           expect(1).toBe(1); // or something that makes more sense...
           done();
        })
        .catch(fail)
});

文档:https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support