Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript karma-test-shim.js调用TestBed.initTestEnvironment,但没有效果。必须再次初始化测试床_Javascript_Unit Testing_Angular_Karma Jasmine_Angular2 Testing - Fatal编程技术网

Javascript karma-test-shim.js调用TestBed.initTestEnvironment,但没有效果。必须再次初始化测试床

Javascript karma-test-shim.js调用TestBed.initTestEnvironment,但没有效果。必须再次初始化测试床,javascript,unit-testing,angular,karma-jasmine,angular2-testing,Javascript,Unit Testing,Angular,Karma Jasmine,Angular2 Testing,我目前正在尝试使用Angular2 final和karma+jasmine进行单元测试 我有以下问题: TypeError:如果不添加,则无法读取null的属性“injector:TestBed.initTestEnvironment(BrowserDynamicTestingModule,platformBrowserDynamicTesting()) .配置测试模块({ 声明:[], 提供者:[资料], 进口:[材料] }); 对我的测试 但是我只能调用initTestEnvironment

我目前正在尝试使用Angular2 final和karma+jasmine进行单元测试

我有以下问题:
TypeError:如果不添加,则无法读取null的属性“injector:
TestBed.initTestEnvironment(BrowserDynamicTestingModule,platformBrowserDynamicTesting())
.配置测试模块({
声明:[],
提供者:[资料],
进口:[材料]
});

对我的测试

但是我只能调用
initTestEnvironment
configureTestingModule
一次,因此不可能进行多个测试。我想避免进行初始化测试

这是我的karma-test-shim.js

    // #docregion
// /*global jasmine, __karma__, window*/
Error.stackTraceLimit = 0; // "No stacktrace"" is usually best for app testing.

// Uncomment to get full stacktrace output. Sometimes helpful, usually not.
// Error.stackTraceLimit = Infinity; //

jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;

var builtPath = '/base/app/';

__karma__.loaded = function () { };

function isJsFile(path) {
  return path.slice(-3) == '.js';
}

function isSpecFile(path) {
  return /\.spec\.(.*\.)?js$/.test(path);
}

function isBuiltFile(path) {
  return isJsFile(path) && (path.substr(0, builtPath.length) == builtPath);
}

var allSpecFiles = Object.keys(window.__karma__.files)
  .filter(isSpecFile)
  .filter(isBuiltFile);

System.config({
  baseURL: '/base',
  // Extend usual application package list with test folder
  packages: { 'testing': { main: 'index.js', defaultExtension: 'js' } },

  // Assume npm: is set in `paths` in systemjs.config
  // Map the angular testing umd bundles
  map: {
    '@angular/core/testing': 'npm:@angular/core/bundles/core-testing.umd.js',
    '@angular/common/testing': 'npm:@angular/common/bundles/common-testing.umd.js',
    '@angular/compiler/testing': 'npm:@angular/compiler/bundles/compiler-testing.umd.js',
    '@angular/platform-browser/testing': 'npm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
    '@angular/platform-browser-dynamic/testing': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
    '@angular/http/testing': 'npm:@angular/http/bundles/http-testing.umd.js',
    '@angular/router/testing': 'npm:@angular/router/bundles/router-testing.umd.js',
    '@angular/forms/testing': 'npm:@angular/forms/bundles/forms-testing.umd.js',
  },
});

System.import('systemjs.config.js')
  .then(importSystemJsExtras)
  .then(initTestBed)
  .then(initTesting);

/** Optional SystemJS configuration extras. Keep going w/o it */
function importSystemJsExtras(){
  return System.import('systemjs.config.extras.js')
  .catch(function(reason) {
    console.log(
      'WARNING: System.import could not load "systemjs.config.extras.js"; continuing without it.'
    );
    console.log(reason);
  });
}

function initTestBed(){
  return Promise.all([
    System.import('@angular/core/testing'),
    System.import('@angular/platform-browser-dynamic/testing')
  ])

  .then(function (providers) {
    var coreTesting    = providers[0];
    var browserTesting = providers[1];

    console.log("call initTestEnvironment")
    coreTesting.TestBed.initTestEnvironment(
      browserTesting.BrowserDynamicTestingModule,
      browserTesting.platformBrowserDynamicTesting());

    console.log("call configure teting module")
    coreTesting.TestBed.configureTestingModule({
      declarations: [],
      providers: [],
      imports: []
    })
  })


}

// Import all spec files and start karma
function initTesting () {
  return Promise.all(
    allSpecFiles.map(function (moduleName) {
      return System.import(moduleName);
    })
  )
  .then(__karma__.start, __karma__.error);
}
我认为在测试垫片中调用initTestEnvironment就足够了。我很惊讶,karma-test-shim.js中的调用似乎没有效果

package.json和代码在一个相关的问题中:


非常感谢您的帮助。

如果
TestBed.initTestEnvironment
已在垫片中,则无需在测试中再次调用它。您是否确认垫片正在使用?您是否将其添加到karma配置中?是的,我看到日志输出:console.log(“调用配置teting模块”)。但是我得到了错误:TypeError:无法读取null的属性“injector”。我需要调用TestBed.initTestEnvironment(BrowserDynamicTestingModule,platformBrowserDynamicTesting())才能使测试正常工作。但是我在beforeach()中调用它,所以当我添加第二个测试时,它会抱怨我多次调用TestBed.initTestEnvironment(但实际上我调用了三次)。您可以在调用initEnvironment之前调用
TestBed.resetEnvironment
。这可能会奏效。@peeskillet,行得通!非常感谢。