node.js - Nepodarilo sa načítať config.ts kvôli importu protractora
Snažím sa spustiť nový projekt Protractor na testovanie Angular stránky. Nainštaloval som node.js, typescript, protractor globálne a jasmine. Prejdem do priečinka projektu a spustím webdriver-manager update. Potom spustím webdriver-manager start. Tiež zostavím súbor config.ts pomocou tsc config.ts. Všetko funguje správne, až kým neskúsim protractor config.ts. Tu poskytnem svoj súbor config.ts a svoj package.json.
{
"name": "protractortests",
"version": "1.0.0",
"description": "Automated tests for a game platform",
"main": "index.js",
"dependencies": {
"@types/jasmine": "^3.3.12",
"@types/node": "^12.0.2",
"jasmine": "^3.4.0",
"protractor": "^5.4.2"
},
"devDependencies": {},
"scripts": {
"test": "protractor config.ts"
}
a môj config.ts:
import { ProtractorBrowser, Config } from "protractor";
export let config: Config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
'browserName': 'chrome'
},
framework: 'jasmine',
specs: ['./FirstSpec.ts'],
jasmineNodeOpts: {
defaultTimeoutInterval: 90000
},
onPrepare: () => {
let globals = require('protractor/built');
let browser = globals.browser;
browser.manage().window().maximize();
browser.manage().timeouts().implicitlyWait(5000);
}
}
E/configParser - Error code: 105
[11:40:53] E/configParser - Error message: failed loading configuration file config.ts
[11:40:53] E/configParser - C:\Users\Victor\Documents\ProtractorTests\config.ts:1
(function (exports, require, module, __filename, __dirname) { import { ProtractorBrowser, Config } from "protractor";
^
SyntaxError: Unexpected token {
at new Script (vm.js:80:7)
at createScript (vm.js:274:10)
at Object.runInThisContext (vm.js:326:10)
at Module._compile (internal/modules/cjs/loader.js:664:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
npm ERR! Test failed. See above for more details.
Odpoveď č. 1
Odkazom na príklad na odkaze https://github.com/angular/protractor/tree/5.4.1/exampleTypescript
Nemusíte importovať ProtractorBrowser. Môžete priamo pracovať s prehliadačom pomocou objektu Browser.
Odpoveď č. 2
Komentátori poukázali na to, že Protractoru nemôžete dať konfiguračný súbor v natívnom TypeScripte a musíte ho skompilovať na config.js a potom ho odovzdať. V skutočnosti nemá zmysel písať súbor v TypeScripte vôbec, len to pridáva ďalší krok, ktorý vám neprináša žiadnu hodnotu. Ak chcete automatické dopĺňanie v editore, môžete ozdobiť svoj JS anotáciami typov:
const { join } = require("path");
const { register } = require("ts-node");
const { SpecReporter, StacktraceOption } = require("jasmine-spec-reporter");
/** @type {import("protractor").Config} */
const config = {
directConnect: true,
baseUrl: "http://localhost:8080",
framework: "jasmine",
noGlobals: true,
specs: [ "./src/**/*.e2e.ts" ],
onPrepare() {
register({
project: join(__dirname, "./tsconfig.json")
});
jasmine.getEnv().addReporter(new SpecReporter({
spec: {
displayStacktrace: StacktraceOption.PRETTY
}
}));
}
};
module.exports = { config };
Moju konfiguráciu som prispôsobil z tohto vynikajúceho príkladu.
