- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 systemjs、karma、angular2 和 jspm。该项目运行良好。当我运行测试时,我遇到了问题。说找不到核心测试库。我不确定在哪里更改此配置。
感谢任何帮助。
吉姆。
-- 单元测试
import {it, describe, expect, beforeEach, inject} from '@angular/core/testing'
import {myCOmponent} from 'path to my comonent';
describe('myCOmponent ', () => {
it('should have the component of defined', () => {
expect(myCOmponent).toBeDefined();
});
});
---- karma session
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
// paths loaded by Karma
{pattern: 'jspm_packages/system-polyfills.js', included: true, watched: true},
{pattern: 'jspm_packages/system.src.js', included: true, watched: true},
{pattern: 'node_modules/es6-shim/es6-shim.js', included: true, watched: true},
{pattern: 'node_modules/angular2-polyfill/bundles/angular2-polyfill.js', included: true, watched: true},
{pattern: 'jspm_packages/npm/@angular/core/testing', included: true, watched: true},
{pattern: 'karma-test-shim.js', included: true, watched: true},
// paths to support debugging with source maps in dev tools
{pattern: 'app/**/*.ts', included: false, watched: false},
],
// proxied base paths
proxies: {
// required for component assests fetched by Angular's compiler
"/app/": "/base/app/"
},
preprocessors: {
// source files, that you wanna generate coverage for
// do not include tests or libraries
// (these files will be instrumented by Istanbul)
'app/**/*.js': ['coverage']
},
htmlReporter: {
outputFile: 'reports/test/index.html'
},
// optionally, configure the reporter
coverageReporter: {
type: 'json',
dir: 'reports/',
subdir: '.',
file: 'coverage.json'
},
reporters: ['progress', 'html', 'coverage'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
})
}
--- karma 垫片
// Tun on full stack traces in errors to help debugging
// Error.stackTraceLimit = Infinity;
Error.stackTraceLimit = 0;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 3000;
// // Cancel Karma's synchronous start,
// // we will call `__karma__.start()` later, once all the specs are loaded.
__karma__.loaded = function() {};
System.config({
packages: {
'base/app': {
defaultExtension: false,
format: 'register',
map: Object.keys(window.__karma__.files).
filter(onlyAppFiles).
reduce(function createPathRecords(pathsMapping, appPath) {
// creates local module name mapping to global path with karma's fingerprint in path, e.g.:
// './hero.service': '/base/public/app/hero.service.js?f4523daf879cfb7310ef6242682ccf10b2041b3e'
var moduleName = appPath.replace(/^\/base\/app\//, './').replace(/\.js$/, '');
pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath]
return pathsMapping;
}, {})
}
}
});
System.import('@angular/core/testing').then(function(testing) {
console.log(testing);
return System.import('@angular/platform-browser-dynamic/testing').then(function(providers) {
testing.setBaseTestProviders(providers.TEST_BROWSER_PLATFORM_PROVIDERS,
providers.TEST_BROWSER_APPLICATION_PROVIDERS);
});
}).then(function() {
return Promise.all(
Object.keys(window.__karma__.files) // All files served by Karma.
.filter(onlySpecFiles)
// .map(filePath2moduleName) // Normalize paths to module names.
.map(function(moduleName) {
// loads all spec files via their global module names (e.g. 'base/public/app/hero.service.spec')
return System.import(moduleName);
}));
})
.then(function() {
__karma__.start();
}, function(error) {
__karma__.error(error.stack || error);
});
function filePath2moduleName(filePath) {
return filePath.
replace(/^\//, ''). // remove / prefix
replace(/\.\w+$/, ''); // remove suffix
}
function onlyAppFiles(filePath) {
return /^\/base\/app\/.*\.js$/.test(filePath)
}
function onlySpecFiles(path) {
return /^\/base\/test\/.*\.js$/.test(path);
}
最佳答案
所以配置这个有两个部分。你有 Karma 配置,你有 SystemJS 配置。 Karma 是服务器,因此您需要像处理任何应用程序一样将所有文件包含在服务器中。 files
karma.conf
中的数组是您列出应包含在服务器中的所有文件的地方。所以目前你丢失了一堆 Angular 文件。您可以简单地执行以下操作以包含所有这些内容
{ pattern: 'jspm_packages/npm/@angular/**/*.js', included: false, watched: false },
{ pattern: 'jspm_packages/npm/@angular/**/*.js.map', included: false, watched: false },
这使用一种模式来包含所有 @angular
文件。 include: false
因为您不想将它们添加为 <script>
s 到 karma 服务器中使用的索引页。 watched: false
因为您不希望 Karma 在观看模式下观看它们。
您可能还需要其他文件,例如 rxjs
.看看 karma.conf
from the Angular 2 quickstart获取它们包含的所有文件的列表。
您还会注意到 systemjs.config.js
文件。如果您使用 SystemJS 作为应用程序的模块加载器,那么您应该有这个文件。此文件加载应用程序所需的所有模块,因此您在测试时也需要它们。
然后您需要配置SystemJS 进行测试。您有应用 systemjs.config.js
文件,但这仅适用于主应用程序。您仍然需要加载 @angular
用于测试的模块,例如 @angular/core/testing
.这些不包括在申请中systemjs.conf.js
文件,因为您在应用程序中不需要这些测试文件。这就是karma-test-shim
是为了。
所以在你身上 karma-test-shim
,您需要配置 SystemJS 以加载测试模块。你可以看看 karma-test-shim
from the Angular 2 quickstart看看他们是如何配置它的。您将需要创建一个映射,以便可以使用短名称而不是完整路径来加载文件。例如
System.config({
paths: {
'jspm:': 'jspm_packages/npm/'
},
baseURL: 'base',
map: {
'@angular/core/testing': 'jspm:@angular/core/bundles/core-testing.umd.js',
'@angular/common/testing': 'jspm:@angular/common/bundles/common-testing.umd.js',
'@angular/compiler/testing': 'jspm:@angular/compiler/bundles/compiler-testing.umd.js',
'@angular/platform-browser/testing': 'jspm:@angular/platform-browser/bundles/platform-browser-testing.umd.js',
'@angular/platform-browser-dynamic/testing': 'jspm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic-testing.umd.js',
'@angular/http/testing': 'jspm:@angular/http/bundles/http-testing.umd.js',
'@angular/router/testing': 'jspm:@angular/router/bundles/router-testing.umd.js',
'@angular/forms/testing': 'jspm:@angular/forms/bundles/forms-testing.umd.js',
},
});
如果您查看 paths
,你会看到它只是设置了一个前缀,这样你以后就不需要输入那么多了。创建映射时将使用此前缀。
然后在map
您将看到创建了别名。例如
'@angular/core/testing': 'jspm:@angular/core/bundles/core-testing.umd.js',
在这里看到映射 @angular/core/testing
使用 paths
映射到实际的模块文件前面提到的前缀。这就是我们能够做到的方式
import { TestBed } from '@angular/core/testing'
System.import('@angular/core/testing')
正是因为映射,我们才能够做到这一点。如果我们没有映射,SystemJS 将查找文件名 @angular/core/testing
它找不到,因此出现 404。
我认为这应该能为您提供足够的信息来帮助您弄清楚您需要做什么。查看 quickstart 中的文件我链接到了,如果你遇到困难,可以作为引用。
关于angular - [网络服务器] : 404:/@angular/core/testing, systemjs、 karma 、angular2、jspm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772737/
当我使用以下命令设置 jspm 安装时: jspm init 然后它只询问我初始配置: Would you like jspm to prefix the jspm package.json prop
我正在使用标准的 ngUpgrade 模块将 AngularJS 应用程序升级到 Angular。我已将服务转换为 Angular,我需要将其降级以便在现有的 AngularJS 模块中使用它。我正在
我正在 SystemJS+Typescript 环境中运行 Jasmine 测试(基本上 a plunk 这应该是 Angular 2 测试平台)。 Jasmine 有意用作全局库,而不是通过 Typ
我有一个没有安装 systemJS 的项目。 这是 package.json: { "name": "mytest", "version": "0.1.0", "private": tru
我使用 SystemJS 作为模块系统来编译 TypeScript 文件,但每当我在浏览器中加载页面时(通过 live-server ),我都会收到以下错误: ReferenceError: Sens
我正在尝试将我的应用程序与 webpack 捆绑在一起,然后将其包含在带有 SystemJS 的父应用程序中,我有点迷失了。 我已经创建了我的包,我已经尝试将它转换为 commonjs/umd/amd
我无法让 systemjs 工作,所以它解析节点模块。 我的 index.html 中有以下内容: System.import('blast/test') .the
我正在尝试遵循 Angular 2 设置指南,但遇到了问题。我正在使用 browsersync,我似乎无法弄清楚如何让这段代码工作。 ....... System.import('./a
有没有办法等到所有 System.register(从 ES6 转译而来)都被解析和加载? 这对于 e2e testing in Angular 特别有用和其他小东西。 最佳答案 System.imp
我有一个非常基本的 config.js文件按预期工作,只要它部署在根 URL 下。这是样本 config.js文件: System.config({ //use typescript for co
我想导入 Angular,实例化 AngularJS 模块,然后导入另一个需要实例化 Angular 的文件: import angular from 'angular'; var app = ang
在尝试让 Angular (1.x) 与 systemjs 一起工作时,我意识到目前没有能力(据我所知)自动将 $inject 插入到 Angular 组件中,这使得即使函数的参数被缩小器破坏,组件也
我正在使用 jspm 和 SystemJS 导入 ES2015 模块。 是否可以通过 System 对象或其他任何地方获取项目中所有导入模块的列表?我可以通过 System._loader.modul
我正在使用 JSPM、AngularJS、TypeScript、SystemJS 和 ES6 并且我的项目运行得很好......除非我尝试使用 momentJS。 这是我得到的错误: TypeErro
有人可以告诉我如何使用 SystemJS 将简单的 javascript 文件加载到浏览器中。 我正在尝试使用以下语法从我的node_modules文件夹加载jquery: packages: {
我在使用 systemjs-builder 构建我的应用程序时遇到问题。 这是我的应用程序的结构。 这是要构建的函数: var systemjsBuild = { map: {
有人让 SystemJS 和 SignalR 一起工作吗?我一直在尝试使用 SystemJS(来自 jspm)加载 SignalR,但无论我做什么,异步加载器总是存在竞争条件。大约一半的加载时间,Si
我正在使用 Angular2,并且我想包含 jQuery。 systemjs.config.js (function (global) { System.config({ paths: { '
我在所有项目中都使用 SystemJs 和 JSPM,感觉太棒了。使用前端库变得前所未有的简单,使用 JSPM 我可以通过几个简单的步骤来完成: 命令行:jspm 安装角度 index.ts|js:i
我无法使用 SystemJS (0.19.47) 正确加载 RxJS 基本上我有一些 TypeScript…… import {BehaviorSubject} from "rxjs"; let s
我是一名优秀的程序员,十分优秀!