首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有done()方法,量角器不能通过我的测试

没有done()方法,量角器不能通过我的测试
EN

Stack Overflow用户
提问于 2016-04-18 14:25:02
回答 5查看 2.3K关注 0票数 1

我实际上正在完成我的角度应用程序的单元测试。我目前正在使用量角器和茉莉花进行E2E测试。不幸的是,我有以下问题:

我在网上做了大量的研究,比如http://ramonvictor.github.io/protractor/slides/#/1,我显然从未见过使用“完成”回调来启动测试。

第一个测试将在createUser页面上进行,并确保用户选项卡属性设置为active。只有当我使用done方法时它才会传递,这是我不应该使用的方法。

代码语言:javascript
复制
'use strict';

var UserCreate = require('./page-objects/userCreate.pageObjects');

describe('on init', function () {

    beforeEach(function() {
       var rootUrl = browser.baseUrl + '/#/users/create';
       browser.driver.get(rootUrl);
    });

    it('should set the user tab active', function(done) { // DONE callback
        UserCreate.tabs.getAttribute('class').then(function(value) {
            expect(value).toEqual('active');
            done(); // calling callback
        });
     });
 });

如果我在没有使用done()的情况下重复相同的测试,那么即使这次测试也通过了,我希望它是fail

代码语言:javascript
复制
'use strict';

var UserCreate = require('./page-objects/userCreate.pageObjects');

describe('on init', function () {

    beforeEach(function() {
       var rootUrl = browser.baseUrl + '/#/users/create';
       browser.driver.get(rootUrl);
    });

    it('should set the user tab active', function() {
        UserCreate.tabs.getAttribute('class').then(function(value) {
            expect(value).toEqual('activeWRONG');
        });
     });
 });

只有当我使用已完成的回调时,它才会失败。

下面是我的配置文件:

代码语言:javascript
复制
 /* conf.js */
'    use strict';

exports.config = {
rootElement: '#myApp',
directConnect: true,
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
    browserName: 'chrome',
    shardTestFiles: true,
    maxInstances: 1
},
framework: 'jasmine',
// specs: ['./*.spec.js'],
baseUrl: 'http://localhost:9001',
defaultTimeoutInterval: 0000,
jasmineNodeOpts: {
    showColors: true,
},
suites: {
    wip:        './userCreate.spec.js',
    all:        './*spec.js'
},
onPrepare: function() {
    browser.driver.get('http://localhost:9001/#/');
    element(by.id('ld-link-login')).click();
    browser.sleep(500);

    element(by.model('username')).sendKeys('test');
    element(by.model('password')).sendKeys('test');
    element(by.id('nv-login-submit')).click();

    return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /dashboard/.test(url);
        });
    }, 10000);
}
};

我在更深层次的测试中遇到了异步问题,所以我想在继续测试之前修复这个问题。

谢谢你的帮助。

编辑:

量角器版本:./节点_模块/..bin/量角器--版本提供3.2.2版本

userCreate.pageObjects:

代码语言:javascript
复制
'use strict';

 module.exports = {
    tabs: element(by.id('cc-tab-user'))
  };

EN

回答 5

Stack Overflow用户

发布于 2016-04-18 15:53:30

这就是人们所期望的行为。如果您不请求done()函数,茉莉将认为您的测试是同步的,并且无需等待承诺得到解决就可以完成测试。当您请求它时,您的测试变成异步的,如果在超时之前没有调用done() (默认情况下是5秒),那么测试就会失败--参见:支持获取更多信息。

票数 0
EN

Stack Overflow用户

发布于 2016-04-18 16:02:44

在定义Page对象的方式上,您遇到了一个问题,它导致了承诺解决顺序的问题。遵循风格指南并将其更改为:

代码语言:javascript
复制
var UserCreatePage = function() {
  this.tabs = element(by.id('cc-tab-user'));
};

module.exports = UserCreatePage;

用法:

代码语言:javascript
复制
'use strict';

var UserCreatePage = require('./page-objects/userCreate.pageObjects');

describe('on init', function () {
    var userCreatePage;

    beforeEach(function() {
       var rootUrl = browser.baseUrl + '/#/users/create';
       browser.driver.get(rootUrl);

       userCreatePage = new UserCreatePage();
    });

    it('should set the user tab active', function() {
        userCreatePage.tabs.getAttribute('class').then(function(value) {
            expect(value).toEqual('activeWRONG');
        });
     });
 });
票数 0
EN

Stack Overflow用户

发布于 2017-05-09 15:45:38

如果您的测试在测试的“控制流”中创建了一个并行TaskQueue,则此行为可能发生。对于所做的()是为了和如何使用它(量角器,茉莉花),我编写了一些测试示例,因为这些测试结果不一致。

要确定这是否是您的问题,您可以在测试的各个点打印出控制流:

代码语言:javascript
复制
console.log(protractor.promise.controlFlow().getSchedule(false));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36696772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档