42

メイン テンプレートに定義されたグローバル変数があります。これは、環境コンテキスト パスなど、バックエンドからの情報ビットを格納するために使用します。その変数をサービス内に移動することはできません。

単体テストを実行するときに、その変数を Karma に公開するにはどうすればよいですか?

4

3 に答える 3

69

テスト ファイル内でそのグローバル変数を宣言します。

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'
],
于 2013-10-09T05:22:47.893 に答える
6

最初の解決策は、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()
);
于 2016-11-18T20:02:23.723 に答える