Update to Ember 3.16/Data 3.12 (#8319)

This updates to Ember 3.16 but leaves Ember Data at 3.12 so we don’t need
to use the model fragments beta. It can be reviewed on a commit-by-commit
basis: blueprint updates, fixes for test failures, and the removal of
now-deprecated partials.

It’s not a true update to Octane as that would involve turning on template-only
components by default, which breaks various things. We can accomplish that
separately and then add the edition setting to package.json.
This commit is contained in:
Buck Doyle
2020-07-09 11:37:00 -05:00
committed by GitHub
parent 58221c7785
commit 2241b669f2
47 changed files with 1743 additions and 695 deletions

View File

@@ -4,7 +4,6 @@
root = true root = true
[*] [*]
end_of_line = lf end_of_line = lf
charset = utf-8 charset = utf-8

View File

@@ -1,3 +1,5 @@
'use strict';
module.exports = { module.exports = {
root: true, root: true,
globals: { globals: {
@@ -35,6 +37,7 @@ module.exports = {
], ],
'ember/classic-decorator-hooks': 'error', 'ember/classic-decorator-hooks': 'error',
'ember/classic-decorator-no-classic-methods': 'error', 'ember/classic-decorator-no-classic-methods': 'error',
'ember/no-jquery': 'error',
}, },
overrides: [ overrides: [
// node files // node files

View File

@@ -1,16 +1,12 @@
import Application from '@ember/application'; import Application from '@ember/application';
import Resolver from './resolver'; import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers'; import loadInitializers from 'ember-load-initializers';
import config from './config/environment'; import config from './config/environment';
let App; export default class App extends Application {
App = class AppApplication extends Application {
modulePrefix = config.modulePrefix; modulePrefix = config.modulePrefix;
podModulePrefix = config.podModulePrefix; podModulePrefix = config.podModulePrefix;
Resolver = Resolver; Resolver = Resolver;
}; }
loadInitializers(App, config.modulePrefix); loadInitializers(App, config.modulePrefix);
export default App;

View File

@@ -1,5 +1,8 @@
import Component from '@ember/component'; import Component from '@ember/component';
import { tagName } from '@ember-decorators/component'; import { tagName } from '@ember-decorators/component';
import { inject as service } from '@ember/service';
@tagName('') @tagName('')
export default class ForbiddenMessage extends Component {} export default class ForbiddenMessage extends Component {
@service token;
}

View File

@@ -0,0 +1,6 @@
import Component from '@ember/component';
import { tagName } from '@ember-decorators/component';
@tagName('')
export default class HamburgerMenu extends Component {
}

View File

@@ -0,0 +1,6 @@
import Component from '@ember/component';
import { tagName } from '@ember-decorators/component';
@tagName('')
export default class JobSubnav extends Component {
}

View File

@@ -13,7 +13,7 @@ export default class ListTable extends Component {
// Plan for a future with metadata (e.g., isSelected) // Plan for a future with metadata (e.g., isSelected)
@computed('source.[]') @computed('source.[]')
get decoratedSource() { get decoratedSource() {
return this.source.map(row => ({ return (this.source || []).map(row => ({
model: row, model: row,
})); }));
} }

View File

@@ -0,0 +1,6 @@
import Component from '@ember/component';
import { tagName } from '@ember-decorators/component';
@tagName('')
export default class LoadingSpinner extends Component {
}

View File

@@ -14,7 +14,11 @@ export default class RescheduleEventRow extends Component {
// An allocation can also be provided directly // An allocation can also be provided directly
@overridable('allocationId', function() { @overridable('allocationId', function() {
return this.store.findRecord('allocation', this.allocationId); if (this.allocationId) {
return this.store.findRecord('allocation', this.allocationId);
}
return null;
}) })
allocation; allocation;

View File

@@ -5,11 +5,14 @@ import d3Format from 'd3-format';
import d3Scale from 'd3-scale'; import d3Scale from 'd3-scale';
import d3Array from 'd3-array'; import d3Array from 'd3-array';
import LineChart from 'nomad-ui/components/line-chart'; import LineChart from 'nomad-ui/components/line-chart';
import layout from '../templates/components/line-chart';
import formatDuration from 'nomad-ui/utils/format-duration'; import formatDuration from 'nomad-ui/utils/format-duration';
import classic from 'ember-classic-decorator'; import classic from 'ember-classic-decorator';
@classic @classic
export default class StatsTimeSeries extends LineChart { export default class StatsTimeSeries extends LineChart {
layout = layout;
xProp = 'timestamp'; xProp = 'timestamp';
yProp = 'percent'; yProp = 'percent';
timeseries = true; timeseries = true;

View File

@@ -0,0 +1,6 @@
import Component from '@ember/component';
import { tagName } from '@ember-decorators/component';
@tagName('')
export default class SvgPatterns extends Component {
}

View File

@@ -1,3 +0,0 @@
import Resolver from 'ember-resolver';
export default Resolver;

View File

@@ -1,7 +1,7 @@
import EmberRouter from '@ember/routing/router'; import EmberRouter from '@ember/routing/router';
import config from './config/environment'; import config from './config/environment';
class Router extends EmberRouter { export default class Router extends EmberRouter {
location = config.locationType; location = config.locationType;
rootURL = config.rootURL; rootURL = config.rootURL;
} }
@@ -68,5 +68,3 @@ Router.map(function() {
this.route('not-found', { path: '/*' }); this.route('not-found', { path: '/*' });
}); });
export default Router;

View File

@@ -1,6 +1,6 @@
<HeadLayout /> <HeadLayout />
{{title (if system.shouldShowRegions (concat system.activeRegion " - ")) "Nomad" separator=" - "}} {{title (if system.shouldShowRegions (concat system.activeRegion " - ")) "Nomad" separator=" - "}}
{{partial "svg-patterns"}} <SvgPatterns />
{{#unless error}} {{#unless error}}
{{outlet}} {{outlet}}
{{else}} {{else}}

View File

@@ -1,7 +1,7 @@
{{title "Clients"}} {{title "Clients"}}
<section class="section"> <section class="section">
{{#if isForbidden}} {{#if isForbidden}}
{{partial "partials/forbidden-message"}} <ForbiddenMessage />
{{else}} {{else}}
<div class="toolbar"> <div class="toolbar">
<div class="toolbar-item"> <div class="toolbar-item">

View File

@@ -1 +1 @@
<section class="section has-text-centered">{{partial "partials/loading-spinner"}}</section> <section class="section has-text-centered"><LoadingSpinner /></section>

View File

@@ -1,10 +1,10 @@
<nav class="navbar is-primary"> <nav class="navbar is-primary">
<div class="navbar-brand"> <div class="navbar-brand">
<span data-test-header-gutter-toggle class="gutter-toggle" aria-label="menu" onclick={{action onHamburgerClick}}> <span data-test-header-gutter-toggle class="gutter-toggle" aria-label="menu" onclick={{action onHamburgerClick}}>
{{partial "partials/hamburger-menu"}} <HamburgerMenu />
</span> </span>
<LinkTo @route="jobs" class="navbar-item is-logo"> <LinkTo @route="jobs" class="navbar-item is-logo">
{{partial "partials/nomad-logo"}} <NomadLogo />
</LinkTo> </LinkTo>
</div> </div>
{{#unless (media "isMobile")}} {{#unless (media "isMobile")}}

View File

@@ -2,10 +2,10 @@
<div class="gutter {{if isOpen "is-open"}}"> <div class="gutter {{if isOpen "is-open"}}">
<header class="collapsed-menu {{if isOpen "is-open"}}"> <header class="collapsed-menu {{if isOpen "is-open"}}">
<span data-test-gutter-gutter-toggle class="gutter-toggle" aria-label="menu" onclick={{action onHamburgerClick}}> <span data-test-gutter-gutter-toggle class="gutter-toggle" aria-label="menu" onclick={{action onHamburgerClick}}>
{{partial "partials/hamburger-menu"}} <HamburgerMenu />
</span> </span>
<span class="logo-container"> <span class="logo-container">
{{partial "partials/nomad-logo"}} <NomadLogo />
</span> </span>
</header> </header>
<aside class="menu"> <aside class="menu">

View File

Before

Width:  |  Height:  |  Size: 236 B

After

Width:  |  Height:  |  Size: 236 B

View File

@@ -1,4 +1,4 @@
{{partial "jobs/job/subnav"}} <JobSubnav @job={{@job}} />
<section class="section"> <section class="section">
{{yield}} {{yield}}
</section> </section>

View File

@@ -1,12 +1,12 @@
<div data-test-subnav="job" class="tabs is-subnav"> <div data-test-subnav="job" class="tabs is-subnav">
<ul> <ul>
<li data-test-tab="overview"><LinkTo @route="jobs.job.index" @model={{job}} @activeClass="is-active">Overview</LinkTo></li> <li data-test-tab="overview"><LinkTo @route="jobs.job.index" @model={{@job}} @activeClass="is-active">Overview</LinkTo></li>
<li data-test-tab="definition"><LinkTo @route="jobs.job.definition" @model={{job}} @activeClass="is-active">Definition</LinkTo></li> <li data-test-tab="definition"><LinkTo @route="jobs.job.definition" @model={{@job}} @activeClass="is-active">Definition</LinkTo></li>
<li data-test-tab="versions"><LinkTo @route="jobs.job.versions" @model={{job}} @activeClass="is-active">Versions</LinkTo></li> <li data-test-tab="versions"><LinkTo @route="jobs.job.versions" @model={{@job}} @activeClass="is-active">Versions</LinkTo></li>
{{#if job.supportsDeployments}} {{#if job.supportsDeployments}}
<li data-test-tab="deployments"><LinkTo @route="jobs.job.deployments" @model={{job}} @activeClass="is-active">Deployments</LinkTo></li> <li data-test-tab="deployments"><LinkTo @route="jobs.job.deployments" @model={{@job}} @activeClass="is-active">Deployments</LinkTo></li>
{{/if}} {{/if}}
<li data-test-tab="allocations"><LinkTo @route="jobs.job.allocations" @model={{job}} @activeClass="is-active">Allocations</LinkTo></li> <li data-test-tab="allocations"><LinkTo @route="jobs.job.allocations" @model={{@job}} @activeClass="is-active">Allocations</LinkTo></li>
<li data-test-tab="evaluations"><LinkTo @route="jobs.job.evaluations" @model={{job}} @activeClass="is-active">Evaluations</LinkTo></li> <li data-test-tab="evaluations"><LinkTo @route="jobs.job.evaluations" @model={{@job}} @activeClass="is-active">Evaluations</LinkTo></li>
</ul> </ul>
</div> </div>

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1 +0,0 @@
{{partial "components/line-chart"}}

View File

@@ -7,7 +7,7 @@
</div> </div>
<section class="section"> <section class="section">
{{#if isForbidden}} {{#if isForbidden}}
{{partial "partials/forbidden-message"}} <ForbiddenMessage />
{{else}} {{else}}
<div class="toolbar"> <div class="toolbar">
<div class="toolbar-item"> <div class="toolbar-item">

View File

@@ -7,7 +7,7 @@
</div> </div>
<section class="section"> <section class="section">
{{#if isForbidden}} {{#if isForbidden}}
{{partial "partials/forbidden-message"}} <ForbiddenMessage />
{{else}} {{else}}
<div class="toolbar"> <div class="toolbar">
<div class="toolbar-item"> <div class="toolbar-item">

View File

@@ -2,7 +2,7 @@
<nav class="navbar is-popup"> <nav class="navbar is-popup">
<div class="navbar-brand"> <div class="navbar-brand">
<div class="navbar-item is-logo"> <div class="navbar-item is-logo">
{{partial "partials/nomad-logo"}} <NomadLogo />
</div> </div>
</div> </div>
@@ -13,5 +13,5 @@
</nav> </nav>
<div class="exec-window loading"> <div class="exec-window loading">
{{partial "partials/loading-spinner"}} <LoadingSpinner />
</div> </div>

View File

@@ -2,7 +2,7 @@
<nav class="navbar is-popup"> <nav class="navbar is-popup">
<div class="navbar-brand"> <div class="navbar-brand">
<div class="navbar-item is-logo"> <div class="navbar-item is-logo">
{{partial "partials/nomad-logo"}} <NomadLogo />
</div> </div>
</div> </div>
{{#if system.shouldShowRegions}} {{#if system.shouldShowRegions}}

View File

@@ -1,7 +1,7 @@
{{title "Jobs"}} {{title "Jobs"}}
<section class="section"> <section class="section">
{{#if isForbidden}} {{#if isForbidden}}
{{partial "partials/forbidden-message"}} <ForbiddenMessage />
{{else}} {{else}}
<div class="toolbar"> <div class="toolbar">
<div class="toolbar-item"> <div class="toolbar-item">

View File

@@ -1,5 +1,5 @@
{{title "Job " job.name " allocations"}} {{title "Job " job.name " allocations"}}
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section"> <section class="section">
{{#if allocations.length}} {{#if allocations.length}}
<div class="content"> <div class="content">

View File

@@ -1,5 +1,5 @@
{{title "Job " job.name " definition"}} {{title "Job " job.name " definition"}}
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section"> <section class="section">
{{#unless isEditing}} {{#unless isEditing}}
<div class="boxed-section"> <div class="boxed-section">

View File

@@ -1,5 +1,5 @@
{{title "Job " job.name " deployments"}} {{title "Job " job.name " deployments"}}
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section"> <section class="section">
<JobDeploymentsStream @deployments={{model.deployments}} /> <JobDeploymentsStream @deployments={{model.deployments}} />
</section> </section>

View File

@@ -1,5 +1,5 @@
{{title "Job " job.name " evaluations"}} {{title "Job " job.name " evaluations"}}
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section"> <section class="section">
{{#if sortedEvaluations.length}} {{#if sortedEvaluations.length}}
<ListTable <ListTable

View File

@@ -1,2 +1,2 @@
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section has-text-centered">{{partial "partials/loading-spinner"}}</section> <section class="section has-text-centered"><LoadingSpinner /></section>

View File

@@ -1,5 +1,5 @@
{{title "Job " job.name " versions"}} {{title "Job " job.name " versions"}}
{{partial "jobs/job/subnav"}} <JobSubnav @job={{job}} />
<section class="section"> <section class="section">
<JobVersionsStream @versions={{model.versions}} @verbose={{true}} /> <JobVersionsStream @versions={{model.versions}} @verbose={{true}} />
</section> </section>

View File

@@ -1 +1 @@
<section class="section has-text-centered">{{partial "partials/loading-spinner"}}</section> <section class="section has-text-centered"><LoadingSpinner /></section>

View File

@@ -1,3 +1,3 @@
<PageLayout> <PageLayout>
<section class="section has-text-centered">{{partial "partials/loading-spinner"}}</section> <section class="section has-text-centered"><LoadingSpinner /></section>
</PageLayout> </PageLayout>

View File

@@ -1,10 +0,0 @@
<div data-test-error class="empty-message">
<h3 data-test-error-title class="empty-message-headline">Not Authorized</h3>
<p data-test-error-message class="empty-message-body">
{{#if token.secret}}
Your <LinkTo @route="settings.tokens">ACL token</LinkTo> does not provide the required permissions. Contact your administrator if this is an error.
{{else}}
Provide an <LinkTo @route="settings.tokens">ACL token</LinkTo> with requisite permissions to view this.
{{/if}}
</p>
</div>

View File

@@ -1,7 +1,7 @@
{{title "Servers"}} {{title "Servers"}}
<section class="section"> <section class="section">
{{#if isForbidden}} {{#if isForbidden}}
{{partial "partials/forbidden-message"}} <ForbiddenMessage />
{{else}} {{else}}
<ListPagination <ListPagination
@source={{sortedAgents}} @source={{sortedAgents}}

View File

@@ -1 +1 @@
<section class="section has-text-centered">{{partial "partials/loading-spinner"}}</section> <section class="section has-text-centered"><LoadingSpinner /></section>

View File

@@ -7,5 +7,6 @@ self.deprecationWorkflow.config = {
{ handler: 'throw', matchId: 'ember-console.deprecate-logger' }, { handler: 'throw', matchId: 'ember-console.deprecate-logger' },
{ handler: 'throw', matchId: 'ember-test-helpers.rendering-context.jquery-element' }, { handler: 'throw', matchId: 'ember-test-helpers.rendering-context.jquery-element' },
{ handler: 'throw', matchId: 'ember-cli-page-object.is-property' }, { handler: 'throw', matchId: 'ember-cli-page-object.is-property' },
{ handler: 'throw', matchId: 'ember-views.partial' },
], ],
}; };

View File

@@ -1,3 +1,6 @@
{ {
"jquery-integration": false "application-template-wrapper": false,
"default-async-observers": true,
"jquery-integration": false,
"template-only-glimmer-components": false
} }

View File

@@ -8,7 +8,7 @@
"test": "tests" "test": "tests"
}, },
"scripts": { "scripts": {
"build": "./node_modules/ember-cli/bin/ember build -prod", "build": "ember build --environment=production",
"precommit": "lint-staged", "precommit": "lint-staged",
"lint:hbs": "ember-template-lint .", "lint:hbs": "ember-template-lint .",
"lint:js": "eslint .", "lint:js": "eslint .",
@@ -32,7 +32,9 @@
}, },
"devDependencies": { "devDependencies": {
"@babel/plugin-proposal-object-rest-spread": "^7.4.3", "@babel/plugin-proposal-object-rest-spread": "^7.4.3",
"@ember/optional-features": "^0.7.0", "@ember/optional-features": "^1.3.0",
"@glimmer/component": "^1.0.0",
"@glimmer/tracking": "^1.0.0",
"@hashicorp/structure-icons": "^1.3.0", "@hashicorp/structure-icons": "^1.3.0",
"@storybook/ember-cli-storybook": "^0.2.0", "@storybook/ember-cli-storybook": "^0.2.0",
"anser": "^1.4.8", "anser": "^1.4.8",
@@ -50,55 +52,53 @@
"d3-time-format": "^2.1.0", "d3-time-format": "^2.1.0",
"d3-transition": "^1.1.0", "d3-transition": "^1.1.0",
"duration-js": "^4.0.0", "duration-js": "^4.0.0",
"ember-ajax": "^5.0.0", "ember-auto-import": "^1.5.3",
"ember-auto-import": "^1.2.21",
"ember-can": "^2.0.0", "ember-can": "^2.0.0",
"ember-classic-decorator": "^1.0.8", "ember-classic-decorator": "^1.0.8",
"ember-cli": "~3.12.0", "ember-cli": "~3.16.2",
"ember-cli-babel": "^7.7.3", "ember-cli-babel": "^7.17.2",
"ember-cli-clipboard": "^0.13.0", "ember-cli-clipboard": "^0.13.0",
"ember-cli-dependency-checker": "^3.1.0", "ember-cli-dependency-checker": "^3.2.0",
"ember-cli-deprecation-workflow": "^1.0.1", "ember-cli-deprecation-workflow": "^1.0.1",
"ember-cli-eslint": "^5.1.0", "ember-cli-eslint": "^5.1.0",
"ember-cli-funnel": "^0.6.1", "ember-cli-funnel": "^0.6.1",
"ember-cli-htmlbars": "^3.0.1", "ember-cli-htmlbars": "^4.2.2",
"ember-cli-htmlbars-inline-precompile": "^2.1.0", "ember-cli-inject-live-reload": "^2.0.2",
"ember-cli-inject-live-reload": "^2.0.1",
"ember-cli-mirage": "^1.1.2", "ember-cli-mirage": "^1.1.2",
"ember-cli-moment-shim": "^3.5.0", "ember-cli-moment-shim": "^3.5.0",
"ember-cli-page-object": "^1.17.2", "ember-cli-page-object": "^1.17.2",
"ember-cli-sass": "^10.0.0", "ember-cli-sass": "^10.0.0",
"ember-cli-sri": "^2.1.1", "ember-cli-sri": "^2.1.1",
"ember-cli-string-helpers": "^1.5.0", "ember-cli-string-helpers": "^1.5.0",
"ember-cli-template-lint": "^1.0.0-beta.1", "ember-cli-template-lint": "^1.0.0-beta.3",
"ember-cli-uglify": "^2.1.0", "ember-cli-uglify": "^3.0.0",
"ember-composable-helpers": "^2.0.3", "ember-composable-helpers": "^2.0.3",
"ember-concurrency": "^1.0.0", "ember-concurrency": "^1.0.0",
"ember-copy": "^1.0.0", "ember-copy": "^1.0.0",
"ember-data": "~3.12.0", "ember-data": "~3.12.0",
"ember-data-model-fragments": "4.0.0", "ember-data-model-fragments": "4.0.0",
"ember-decorators": "^6.1.1", "ember-decorators": "^6.1.1",
"ember-export-application-global": "^2.0.0", "ember-export-application-global": "^2.0.1",
"ember-fetch": "^6.5.0", "ember-fetch": "^7.0.0",
"ember-inflector": "^3.0.0", "ember-inflector": "^3.0.0",
"ember-inline-svg": "^0.3.0", "ember-inline-svg": "^0.3.0",
"ember-load-initializers": "^2.0.0", "ember-load-initializers": "^2.1.1",
"ember-maybe-import-regenerator": "^0.1.6", "ember-maybe-import-regenerator": "^0.1.6",
"ember-moment": "^7.8.1", "ember-moment": "^7.8.1",
"ember-overridable-computed": "^1.0.0", "ember-overridable-computed": "^1.0.0",
"ember-page-title": "^5.0.2", "ember-page-title": "^5.0.2",
"ember-power-select": "^3.0.4", "ember-power-select": "^3.0.4",
"ember-qunit": "^4.4.1", "ember-qunit": "^4.6.0",
"ember-qunit-nice-errors": "^1.2.0", "ember-qunit-nice-errors": "^1.2.0",
"ember-resolver": "^5.0.1", "ember-resolver": "^7.0.0",
"ember-responsive": "^3.0.4", "ember-responsive": "^3.0.4",
"ember-sinon": "^4.0.0", "ember-sinon": "^4.0.0",
"ember-source": "~3.12.0", "ember-source": "~3.16.0",
"ember-test-selectors": "^2.1.0", "ember-test-selectors": "^2.1.0",
"ember-truth-helpers": "^2.0.0", "ember-truth-helpers": "^2.0.0",
"eslint": "^5.16.0", "eslint": "^5.16.0",
"eslint-plugin-ember": "^6.2.0", "eslint-plugin-ember": "^7.7.2",
"eslint-plugin-node": "^9.0.1", "eslint-plugin-node": "^11.0.0",
"faker": "^4.1.0", "faker": "^4.1.0",
"flat": "^4.0.0", "flat": "^4.0.0",
"fuse.js": "^3.4.4", "fuse.js": "^3.4.4",
@@ -114,7 +114,7 @@
"pretender": "^3.0.1", "pretender": "^3.0.1",
"prettier": "^1.4.4", "prettier": "^1.4.4",
"query-string": "^5.0.0", "query-string": "^5.0.0",
"qunit-dom": "^0.9.0", "qunit-dom": "^1.0.0",
"sass": "^1.17.3", "sass": "^1.17.3",
"testem": "^3.0.3", "testem": "^3.0.3",
"testem-multi-reporter": "^1.2.0", "testem-multi-reporter": "^1.2.0",
@@ -134,7 +134,7 @@
"ember-cli-string-utils": "^1.1.0" "ember-cli-string-utils": "^1.1.0"
}, },
"engines": { "engines": {
"node": "8.* || >= 10.*" "node": "10.* || >= 12"
}, },
"private": true, "private": true,
"ember-addon": { "ember-addon": {

View File

@@ -11,10 +11,10 @@ export let Header = () => {
<nav class="navbar is-primary"> <nav class="navbar is-primary">
<div class="navbar-brand"> <div class="navbar-brand">
<span class="gutter-toggle" aria-label="menu"> <span class="gutter-toggle" aria-label="menu">
{{partial "partials/hamburger-menu"}} <HamburgerMenu />
</span> </span>
<span class="navbar-item is-logo"> <span class="navbar-item is-logo">
{{partial "partials/nomad-logo"}} <NomadLogo />
</span> </span>
</div> </div>
<div class="navbar-end"> <div class="navbar-end">

View File

@@ -1,4 +1,5 @@
/* eslint-env node */ 'use strict';
const MultiReporter = require('testem-multi-reporter'); const MultiReporter = require('testem-multi-reporter');
const TapReporter = require('testem/lib/reporters/tap_reporter'); const TapReporter = require('testem/lib/reporters/tap_reporter');
const XunitReporter = require('testem/lib/reporters/xunit_reporter'); const XunitReporter = require('testem/lib/reporters/xunit_reporter');
@@ -9,6 +10,7 @@ const config = {
disable_watching: true, disable_watching: true,
launch_in_ci: ['Chrome'], launch_in_ci: ['Chrome'],
launch_in_dev: ['Chrome'], launch_in_dev: ['Chrome'],
browser_start_timeout: 120,
browser_args: { browser_args: {
// New format in testem/master, but not in a release yet // New format in testem/master, but not in a release yet
// Chrome: { // Chrome: {

File diff suppressed because it is too large Load Diff