メイン テンプレートに定義されたグローバル変数があります。これは、環境コンテキスト パスなど、バックエンドからの情報ビットを格納するために使用します。その変数をサービス内に移動することはできません。
単体テストを実行するときに、その変数を Karma に公開するにはどうすればよいですか?
メイン テンプレートに定義されたグローバル変数があります。これは、環境コンテキスト パスなど、バックエンドからの情報ビットを格納するために使用します。その変数をサービス内に移動することはできません。
単体テストを実行するときに、その変数を Karma に公開するにはどうすればよいですか?
テスト ファイル内でそのグローバル変数を宣言します。
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'
],
最初の解決策は、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()
);