量角器无法读取属性'超时'未定义的

时间:2016-06-07 15:30:25

标签: angularjs protractor gulp-protractor

我一直在为当前的角度项目编写数十个量角器测试,但它们都有效。

我粘贴测试来创建一组新测试,并注意到如果describe直接嵌套在另一个describe内,我会收到Cannot read property 'timeout' of undefined错误,并且Protractor会退出代码100。

如果我删除嵌套的describe,它就可以立即使用。

如果嵌套it之前有describe,那就有效......所以它对我来说都非常奇怪。

这是测试和错误:

代码:

/* eslint max-len: 0 */
/* eslint-env es6 */
'use strict';

var chai = require('chai');
var expect = chai.expect;
var chaiAsPromised = require('chai-as-promised');
var config = require('../../../../gulp/config');

chai.use(chaiAsPromised);

describe('Compléter la reception de l\'offre d\'acquisition', function describe() {
  var localhost = config.e2e.localhost;

  this.timeout(15000);

  describe('View mode:', function () {
    it('Should redirect the user to the /tableauoffre page when clicking on "Quitter"', function it() {
      browser.get('/tableauoffre');

      browser.waitForAngular()
        .then(function getFirstRow() {
          return element(by.id('table-0'))
            .all(by.css('tbody tr'))
            .get(0);
        })
        .then(function click(row) {
          return row
            .all(by.css('a'))
            .get(0)
            .click();
        })
        .then(function redirect() {
          return browser.getCurrentUrl();
        })
        .then(function click() {
          return element(by.id('quitter-btn'))
            .click();
        })
        .then(function url() {
          return browser.getCurrentUrl();
        })
        .then(function test(url) {
          expect(url).to.equal(`${localhost}/tableauoffre`);
        });
    });
  });
});

错误:

[11:21:24] Starting 'protractor'...
Using ChromeDriver directly...
[launcher] Running 1 instances of WebDriver
[launcher] Error: TypeError: Cannot read property 'timeout' of undefined
    at describe (/Users/[user-name]/Documents/banq/trunk/app/modules/views/assigner.offre/assigner.offre.e2e.js:15:7)
    at Suite.describe (/Users/[user-name]/Documents/banq/trunk/app/modules/views/assigner.offre/assigner.offre.e2e.js:21:3)
    at context.describe.context.context (/Users/[user-name]/Documents/banq/trunk/node_modules/mocha/lib/interfaces/bdd.js:47:10)
    at Object.<anonymous> (/Users/[user-name]/Documents/banq/trunk/app/modules/views/assigner.offre/assigner.offre.e2e.js:12:1)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
[launcher] Process exited with error code 100

/Users/[user-name]/Documents/banq/trunk/gulp/tasks/protractor.js:24
      throw err;
      ^
Error: protractor exited with code 100
    at ChildProcess.<anonymous> (/Users/[user-name]/Documents/banq/trunk/node_modules/gulp-protractor/index.js:63:27)
    at emitTwo (events.js:87:13)
    at ChildProcess.emit (events.js:172:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)

2 个答案:

答案 0 :(得分:0)

只是一个想法......试试

var self = this;
self.timeout(15000);

我也不了解你的问题,但我只是试一试。无论如何,将this存储到变量中是一个很好的技巧,至少在您打算进一步使用它时。

超时的目的是什么?

答案 1 :(得分:0)

好的,所以我发现命名你的回调函数并在其范围内使用一个名为相同的函数实际上会混淆事物,因此this没有正确的属性。

因此,请始终使用唯一名称来呼叫回调函数。