Подтвердить что ты не робот

Глобальные переменные в тестировщике кармы

У меня есть глобальная переменная, определенная в моем основном шаблоне, которую я использую для хранения информационных битов из задней части, таких как путь контекста среды. Я не могу переместить эту переменную внутри службы.

Как я могу выставить эту переменную в Karma, когда я запускаю модульные тесты?

4b9b3361

Ответ 1

Вы либо объявляете эту глобальную переменную в своем тестовом файле:

var global = "something";

describe('Your test suit', function() {
...
});

или добавить файл Javascript, где он определен в вашем файле karma.conf.js:

// list of files / patterns to load in the browser
files: [
   ...,
   'file-containing-the-global-variable.js'
],

Ответ 2

Первое решение не работало для меня в Angular 2.1.x. Он просто не узнает переменную в моей импортированной службе. Мне нужно было поместить переменную окружения в мой файл karma-test-shim.js и удалить var, чтобы он был доступен по всему миру.

Моя выглядит следующим образом:

Error.stackTraceLimit = Infinity;

require('core-js/es6');
require('reflect-metadata');

require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/proxy'),
require('zone.js/dist/sync-test'),
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');

// Add environment variables here so that tests will inject them in source code
API_URL = 'http://localhost:8080/api/';

var appContext = require.context('../src', true, /\.spec\.ts/);

appContext.keys().forEach(appContext);

var testing = require('@angular/core/testing');
var browser = require('@angular/platform-browser-dynamic/testing');

testing.TestBed.initTestEnvironment(
    browser.BrowserDynamicTestingModule,
    browser.platformBrowserDynamicTesting()
);