未在量角器的jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时内调用异步回调

问题描述 投票:0回答:1

我正在使用量角器和ECMAScript 6进行端到端测试。但是当测试完成后,我看到了错误:

Message:
    Error: Timeout - Async callback was not invoked within the timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

我尝试了在StackOverflow和GitHub上找到的所有解决方案。例如,将jasmineNodsOption添加到配置文件,将参数添加到测试函数中,将超时添加到函数中无济于事。

test.js

import { doubleClick, isDisplayed, waitToBeVisible } from '../page_objects/base_page';
import HairLossPage from '../page_objects/HairLossPage';
import CartComponent from '../page_objects/components/CartComponent';

/*global expect describe beforeAll it browser*/
describe('Hair-loss. Question pages', () => {
    const heirLoss = new HairLossPage();
    const cartComponent = new CartComponent();

    beforeAll(() => {
        browser.waitForAngularEnabled(false);
        heirLoss.get();
    });

    it('Check the "CheckOut" button in the mini-cart with product', () => {
        doubleClick(heirLoss.header.card);

        waitToBeVisible(cartComponent.header.title);
        expect(isDisplayed(cartComponent.header.title)).toBe(true);

        expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
    });
});

config.js

require("@babel/register");
require("protractor");
exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['./src/tests/**.e2e.js'],
    multiCapabilities: [{
        browserName: 'chrome'
    }],

    //Global configuration
    baseUrl: 'https:/facebook.com/',

    //Allure configuration
    /*global jasmine browser allure*/
    onPrepare: () => {
        browser.manage().window().maximize();
        var AllureReporter = require('jasmine-allure-reporter');
        jasmine.getEnv().addReporter(new AllureReporter());
        jasmine.getEnv().afterEach((done) => {
            if (done.status === "failed") {
                browser.takeScreenshot().then((png) => {
                    allure.createAttachment('Screenshot', () => new Buffer(png, 'base64'), 'image/png')();
                    done();
                });
            }
        });
    }
};
javascript ecmascript-6 jasmine protractor
1个回答
1
投票

我以为isDisplayedwaitToBeVisible是异步的,并且卡在某处。

尝试:

 beforeAll(() => {
        console.log('Before waiting for angular enabled');
        browser.waitForAngularEnabled(false);
        console.log('After waiting for angular enabled, before heirLoss.get');
        heirLoss.get();
        console.log('After heirLoss.get');
    });

    it('Check the "CheckOut" button in the mini-cart with product', () => {
        console.log('before doubleClick');
        doubleClick(heirLoss.header.card);
        console.log('after doubleClick, before waitToBeVisible');

        waitToBeVisible(cartComponent.header.title);
        console.log('after waitToBeVisible, before first isDisplayed');
        expect(isDisplayed(cartComponent.header.title)).toBe(true);

        console.log('after first isDisplayed, before 2nd isDisplayed');
        // keep adding console.log before and after these assertions and see where it gets stuck.
        expect(isDisplayed(cartComponent.content.shopHair)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopEd)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopSkin)).toBe(true);
        expect(isDisplayed(cartComponent.content.shopDailyHealt)).toBe(true);
    });

一旦了解了卡在哪里,就可以更好地了解为什么卡在这里。

© www.soinside.com 2019 - 2024. All rights reserved.