angularjs - 没有 done() 方法, Protractor 无法通过我的测试

标签 angularjs testing protractor angularjs-e2e

我实际上正在完成我的 Angular 应用程序的单元测试。我目前正在使用 Protractor 和 Jasmine 进行 E2E 测试。不幸的是,我有以下问题:

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

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

'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() 的情况下重复相同的测试,即使这次测试通过,我希望它失败

'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');
        });
     });
 });

只有在我使用 done 回调时才会失败。

这是我的配置文件:

 /* 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);
}
};

我在使用 done everywhere 的更深入测试中遇到异步问题,所以我想在继续我的测试之前解决这个问题。

感谢您的帮助。

编辑:

Protractor 版本:./node_modules/.bin/protractor --version 给出版本 3.2.2

用户创建页面对象:

'use strict';

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

最佳答案

这是预期的行为。如果您不请求 done() 函数,jasmine 将认为您的测试是同步的,并在不等待 promise 被解决的情况下完成。 当你要求它时,你的测试变成异步的,如果 done() 在超时(默认为 5 秒)之前没有被调用,将会失败 请参阅:http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support了解更多信息。

关于angularjs - 没有 done() 方法, Protractor 无法通过我的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696772/

相关文章:

javascript - 在 AngularJS 中查找最近的元素

javascript - 对已上传的图像文件进行 Request.post

javascript - ng-app、ng-repeat、ng Controller 等……从 HTML DOM Angular 来看它们是什么以及 JS 如何访问它们?

java - 如何使用 Junit 测试在数据库中插入记录的 void 方法?

javascript - 跨多个客户端同步的 Firebase 倒数计时器

java - 使用assertJ方法 containsOnly() 比较自定义对象的数组

java - JUnit 断言失败时的自定义消息

javascript - 如何在 Protractor 中从 gmail 中读取 OTP?

node.js - 给定以下文件结构,如何运行基本的 Protractor 测试?

javascript - 如何调试等待异步 Angular 任务超时?无法在 Angular 页面上找到元素