Node中的量角器:如何命令我的测试同步运行?

Joh*_*ers 2 selenium node.js jasmine protractor

我想知道如何以同步顺序执行多个"describe"块?

describe('Go To Home Page', function () {  
    browser.ignoreSynchronization = true;
    it("Url should be on Login Page", function ()  {
        browser.get(HomePageUrl).then(function () {
            browser.wait(urlChanged(loginPageUrl), 2000).then(
                function (newurl){
                    var url = browser.getCurrentUrl().then(function (url) {
                        expect(url).tobe(loginPageUrl);
                        //I know I'm at Login page url... how do I kick off next test?                 
                    });                     
                }
            )          
        });
    });
}); 
Run Code Online (Sandbox Code Playgroud)

此测试转到主页,然后如果它被重定向到登录页面,我想使用新的Describe块执行所有登录测试.问题是,如果我将下一个Describe块放在与第一个相同的级别,则节点并行执行所有这些块.

我不想进入回调 - 地狱......上面的代码在我看来已经变得太深了.

Dzi*_*mid 5

Jasmine 为此提供了异步支持.

describe('Go To Home Page', function () {  
    browser.ignoreSynchronization = true;
    it("Url should be on Login Page", function (done)  {
        browser.get(HomePageUrl).then(function () {
            browser.wait(urlChanged(loginPageUrl), 2000).then(
                function (newurl){
                    var url = browser.getCurrentUrl().then(function (url) {
                        expect(url).tobe(loginPageUrl);
                        done();      
                    });                     
                }
            )          
        });
    });

   it("next", function ()  {
      //will start this block after previous done callback has been called
   });
}); 
Run Code Online (Sandbox Code Playgroud)

PS Promises可以而且应该链接在一行以避免嵌套:

it("Url should be on Login Page", function (done)  {
    browser
        .get(HomePageUrl)
        .then(function () {
            return browser.wait(urlChanged(loginPageUrl), 2000);
        })
        .then(function () {
            return browser.getCurrentUrl();
        })
        .then(function (currentUrl){
            expect(currentUrl).tobe(loginPageUrl);
            done();         
        });
});
Run Code Online (Sandbox Code Playgroud)