量角器超时因为$ timeout和$ interval

时间:2015-08-13 00:27:40

标签: angularjs timeout intervals

我在量角器中进行了简单的登录测试,在添加具有超时和间隔的方法之前运行正常。所以我猜测量器正在等待那些组件完成。如何让我的测试工作?也许如果我以其他方式使用$timeout$interval

我在角度项目中使用超时和间隔就像服务一样。说你好 之后有些人说10秒钟($timeout)并继续打印此信息5次($interval)并打印 bye < / em>间隔时间结束。

这是我的e2e测试:

var LoginPage = require('loginPage');

describe('Should login', function() {

    var page;
    beforeEach(function() {

        page = new LoginPage();
        page.visit();

        browser.getLocationAbsUrl().then(function (url) {
            expect(url).toEqual('/loginform');
        });

        page.setUser('username');
        page.setPassword('123456');

        page.submitLogin();

    });

    it('should redirect to welcome page', function () {
        expect(browser.getCurrentUrl()).toContain('/welcome');
    });
});

这是我的计时器代码块:

// Say hello after 10 seconds and keep printing the message five times.
doTimer(10, 5);

function doTimer(forTimeout, forInterval) {

    var countDown;

    myTimeout = $timeout(function () {

        countDown = forInterval;

        myInterval = $interval(function() {
            countDown--;
            console.log("hello");
            if (countDown == 0) {
                console.log("bye");
            }
        }, 1000);

    }, forTimeout*1000);
}

因此,如果不调用我的方法doTimer,我的测试就会完美无缺。为了让我的测试工作正常,我该如何处理?

1 个答案:

答案 0 :(得分:0)

你应该在声明函数后调用你的doTimer(10,5),如下所示 -

function doTimer(forTimeout, forInterval) {

    var countDown;

    myTimeout = $timeout(function () {

        countDown = forInterval;

        myInterval = $interval(function() {
            countDown--;
            console.log("hello");
            if (countDown == 0) {
                console.log("bye");
            }
        }, 1000);

    }, forTimeout*1000);
}

doTimer(10, 5);

即使在量角器知道函数的位置之前,您也在调用函数,因此,首先尝试声明函数然后调用它。希望这会有所帮助。