运行 使用 Jenkins 的 Protractor 测试抛出 "Test `title` should be a "string" 但给出了 "function"。'"
Running Protractor tests with Jenkins throws "Test `title` should be a "string" but "function" was given instead.'"
所以这有点让人头疼。
如果我 运行 我们的 Protractor e2e 测试来自 Jenkins 作业,它会失败:
[10:23:53] I/local - Starting selenium standalone server...
[10:23:53] I/launcher - Running 1 instances of WebDriver
[10:23:54] I/local - Selenium standalone server started at http://10.0.0.5:43412/wd/hub
[10:23:56] E/launcher - Error: Error: Test `title` should be a "string" but "function" was given instead.
at new Test (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/test.js:24:11)
at context.it.context.specify (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:84:18)
at /var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/protractor/node_modules/selenium-webdriver/testing/index.js:95:14
at context.xit.context.xspecify.context.it.skip (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:103:15)
at Function.skip (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/protractor/node_modules/selenium-webdriver/testing/index.js:98:14)
at Suite.<anonymous> (/var/jenkins/workspace/vw3-predevelop-linux/src/Ui/dev/test/endToEnd/presetInteractions.scenario.js:87:8)
at Object.create (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/common.js:114:19)
at context.describe.context.context (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:42:27)
at Object.<anonymous> (/var/jenkins/workspace/develop-linux/src/Ui/dev/test/endToEnd/presetInteractions.scenario.js:8:1)
at Module._compile (module.js:425:26)
[10:23:56] E/launcher - Process exited with error code 100
但是,如果我作为 Jenkins 用户使用相同版本的 Node (5.0.0) 和 npm (3.3.6) 以及相同的命令通过 ssh 连接到机器,测试 运行正好。
这是它在 mocha 中投入的地方:https://github.com/mochajs/mocha/blob/master/lib/test.js#L24 但我不明白为什么当 Jenkins 运行 测试时它会是 "not a string",但是当我 ssh 时它会很好。我还检查了我们的 presetInteractions.scenario.js
文件,但它与我们的任何其他量角器文件没有什么不同,而且第 8 行肯定没有什么奇怪的...
var Utils = require('./utils');
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
describe('Preset interaction features', function() {
before(function(done) {
...
所以,当然是版本不匹配了。我们检查了 NPM、Node 和 Protractor 的版本,但使用的 Mocha 版本确实不同(2.4.5 与 3.0.2)。回滚到 2.4.5 可消除此问题。
所以这有点让人头疼。
如果我 运行 我们的 Protractor e2e 测试来自 Jenkins 作业,它会失败:
[10:23:53] I/local - Starting selenium standalone server...
[10:23:53] I/launcher - Running 1 instances of WebDriver
[10:23:54] I/local - Selenium standalone server started at http://10.0.0.5:43412/wd/hub
[10:23:56] E/launcher - Error: Error: Test `title` should be a "string" but "function" was given instead.
at new Test (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/test.js:24:11)
at context.it.context.specify (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:84:18)
at /var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/protractor/node_modules/selenium-webdriver/testing/index.js:95:14
at context.xit.context.xspecify.context.it.skip (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:103:15)
at Function.skip (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/protractor/node_modules/selenium-webdriver/testing/index.js:98:14)
at Suite.<anonymous> (/var/jenkins/workspace/vw3-predevelop-linux/src/Ui/dev/test/endToEnd/presetInteractions.scenario.js:87:8)
at Object.create (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/common.js:114:19)
at context.describe.context.context (/var/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/Node_5.0.0/lib/node_modules/mocha/lib/interfaces/bdd.js:42:27)
at Object.<anonymous> (/var/jenkins/workspace/develop-linux/src/Ui/dev/test/endToEnd/presetInteractions.scenario.js:8:1)
at Module._compile (module.js:425:26)
[10:23:56] E/launcher - Process exited with error code 100
但是,如果我作为 Jenkins 用户使用相同版本的 Node (5.0.0) 和 npm (3.3.6) 以及相同的命令通过 ssh 连接到机器,测试 运行正好。
这是它在 mocha 中投入的地方:https://github.com/mochajs/mocha/blob/master/lib/test.js#L24 但我不明白为什么当 Jenkins 运行 测试时它会是 "not a string",但是当我 ssh 时它会很好。我还检查了我们的 presetInteractions.scenario.js
文件,但它与我们的任何其他量角器文件没有什么不同,而且第 8 行肯定没有什么奇怪的...
var Utils = require('./utils');
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var expect = chai.expect;
describe('Preset interaction features', function() {
before(function(done) {
...
所以,当然是版本不匹配了。我们检查了 NPM、Node 和 Protractor 的版本,但使用的 Mocha 版本确实不同(2.4.5 与 3.0.2)。回滚到 2.4.5 可消除此问题。