From 4bb53285e3933dd6018f79dd2ad3ab1c2f46a519 Mon Sep 17 00:00:00 2001 From: Jan Bobisud Date: Sun, 13 Jan 2019 14:07:53 +0100 Subject: [PATCH] Restore fallback for `window.performance` in FastBoot --- packages/@ember/instrumentation/index.ts | 2 +- tests/node/instrumentation-test.js | 27 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/node/instrumentation-test.js diff --git a/packages/@ember/instrumentation/index.ts b/packages/@ember/instrumentation/index.ts index 03e6c788660..65c2df6d9e4 100644 --- a/packages/@ember/instrumentation/index.ts +++ b/packages/@ember/instrumentation/index.ts @@ -105,7 +105,7 @@ function populateListeners(name: string) { } const time = ((): (() => number) => { - let perf: MaybePerf = 'undefined' !== typeof window ? window.performance : {}; + let perf: MaybePerf = 'undefined' !== typeof window ? window.performance || {} : {}; let fn = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow; return fn ? fn.bind(perf) : Date.now; diff --git a/tests/node/instrumentation-test.js b/tests/node/instrumentation-test.js new file mode 100644 index 00000000000..6b3f246a0db --- /dev/null +++ b/tests/node/instrumentation-test.js @@ -0,0 +1,27 @@ +'use strict'; + +var path = require('path'); +var distPath = path.join(__dirname, '../../dist'); +var emberPath = path.join(distPath, 'ember.debug'); + +QUnit.module('instrumentation', function(hooks) { + hooks.afterEach(function() { + delete global.Ember; + delete require.cache[emberPath + '.js']; + }); + + QUnit.test('it works in FastBoot environment', function(assert) { + var _originalWindow = global.window; + + global.window = {}; // mock window without `performance` property + var Ember = require(emberPath); + + var result = Ember.instrument('render', {}, function() { + return 'hello'; + }); + + assert.equal(result, 'hello', 'called block'); + + global.window = _originalWindow; + }); +});