- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个看起来像这样的项目:
我正在尝试让 Karma/Jasmine 作为测试框架工作。我尝试复制这个项目:https://github.com/juliemr/ng2-test-seed ,根据我的需要修改它。我在试图运行的 test
文件夹中有一个模拟测试。不过,当我尝试执行 npm run test
时,我得到的是:
我不确定我的文件路径在 karma-test-shim.js
/karma.conf.js
中是否正确,因为我还比较陌生使用 npm/node 项目。
这是我的 karma-test-shim.js
(文件路径位于 var moduleName
和 onlyAppFiles
函数中):
// Tun on full stack traces in errors to help debugging
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
// // Cancel Karma's synchronous start,
// // we will call `__karma__.start()` later, once all the specs are loaded.
__karma__.loaded = function() {};
System.config({
packages: {
'base/src/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/src/app/hero.service.js?f4523daf879cfb7310ef6242682ccf10b2041b3e'
var moduleName = appPath.replace(/^\/base\/app\/.*\/.*\//, './').replace(/\.js$/, '');
pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath]
return pathsMapping;
}, {})
}
}
});
System.import('angular2/testing').then(function(testing) {
return System.import('angular2/platform/testing/browser').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/src/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 /_test\.js$/.test(path);
}
还有我的karma.conf.js
:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
// paths loaded by Karma
{pattern: 'node_modules/systemjs/dist/system-polyfills.js', included: true, watched: true},
{pattern: 'node_modules/systemjs/dist/system.src.js', included: true, watched: true},
{pattern: 'node_modules/es6-shim/es6-shim.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/angular2-polyfills.js', included: true, watched: true},
{pattern: 'node_modules/rxjs/bundles/Rx.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/angular2.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/testing.dev.js', included: true, watched: true},
{pattern: 'karma-test-shim.js', included: true, watched: true},
// paths loaded via module imports
{pattern: 'app/components/**/*.js', included: false, watched: true},
{pattern: 'app/interfaces/**/*.js', included: false, watched: true},
{pattern: 'app/models/**/*.js', included: false, watched: true},
{pattern: 'app/services/**/*.js', included: false, watched: true},
// paths loaded via Angular's component compiler
// (these paths need to be rewritten, see proxies section)
{pattern: 'app/components/**/*.html', included: false, watched: true},
{pattern: 'assets/css/*.css', included: false, watched: true},
// paths to support debugging with source maps in dev tools
{pattern: 'app/*.ts', included: false, watched: false},
{pattern: 'app/components/**/*.ts', included: false, watched: true},
{pattern: 'app/interfaces/**/*.ts', included: false, watched: true},
{pattern: 'app/models/**/*.ts', included: false, watched: true},
{pattern: 'app/services/**/*.ts', included: false, watched: true},
//{pattern: 'app/**/**/*.js.map', included: false, watched: false}
],
// proxied base paths
proxies: {
// required for component assests fetched by Angular's compiler
"/app/": "/base/app/"
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
})
}
和package.json
:
{
"name": "taohd-app-seed",
"version": "1.0.0",
"scripts": {
"start": "npm run lite",
"app": "./node_modules/.bin/electron main.js",
"lite": "lite-server -c bs-config.json",
"typings": "typings",
"postinstall": "typings install",
"test": "karma start karma.conf.js"
},
"main": "main.js",
"license": "MIT",
"dependencies": {
"angular2": "^2.0.0-beta.12",
"app-module-path": "^1.0.5",
"bootstrap": "^3.3.6",
"electron-prebuilt": "^0.36.11",
"es6-module-loader": "^0.17.11",
"es6-promise": "^3.1.2",
"es6-shim": "^0.35.0",
"graceful-fs": "^4.1.3",
"jspm": "^0.16.31",
"lodash": "^4.6.1",
"moment": "^2.12.0",
"ng2-material": "^0.2.12",
"polo": "^0.8.1",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.2",
"systemjs": "^0.19.22",
"tslint": "^3.6.0",
"uuid": "^2.0.1",
"zone.js": "^0.6.6"
},
"devDependencies": {
"concurrently": "^2.0.0",
"del": "^2.2.0",
"electron-debug": "^0.5.2",
"gulp": "^3.9.1",
"gulp-coverage": "^0.3.38",
"gulp-debug": "^2.1.2",
"gulp-htmllint": "0.0.7",
"gulp-inject": "^3.0.0",
"gulp-jasmine": "^2.3.0",
"gulp-shell": "^0.5.2",
"gulp-sourcemaps": "^1.6.0",
"gulp-tslint": "^4.3.3",
"gulp-typescript": "^2.12.1",
"gulp-util": "^3.0.7",
"jasmine": "^2.4.1",
"jasmine-core": "^2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^0.2.3",
"karma-cli": "^0.1.2",
"karma-jasmine": "^0.3.8",
"lite-server": "^2.1.0",
"typescript": "^1.8.9",
"typings": "^0.7.9"
},
"jspm": {
"directories": {
"baseURL": "app"
},
"dependencies": {
"angular": "github:angular/bower-angular@^1.5.2",
"systemjs-hot-reloader": "github:capaj/systemjs-hot-reloader@^0.5.6"
},
"devDependencies": {
"babel": "npm:babel-core@^5.8.24",
"babel-runtime": "npm:babel-runtime@^5.8.24",
"core-js": "npm:core-js@^1.1.4",
"traceur": "github:jmcriffey/bower-traceur@0.0.93",
"traceur-runtime": "github:jmcriffey/bower-traceur-runtime@0.0.93",
"typescript": "npm:typescript@^1.8.9"
}
}
}
谁能找出我哪里出错了?
最佳答案
我最终让它工作了,结果我弄错了构建模块/运行测试的顺序。
这是当前设置,我在每个 .ts/.js
等价物中都有 .spec.js
文件:
我的karma.conf.js
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
// paths loaded by Karma
{pattern: 'node_modules/systemjs/dist/system-polyfills.js', included: true, watched: true},
{pattern: 'node_modules/systemjs/dist/system.src.js', included: true, watched: true},
{pattern: 'node_modules/es6-shim/es6-shim.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/angular2-polyfills.js', included: true, watched: true},
{pattern: 'node_modules/rxjs/bundles/Rx.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/angular2.js', included: true, watched: true},
{pattern: 'node_modules/angular2/bundles/testing.dev.js', included: true, watched: true},
{pattern: 'karma-test-shim.js', included: true, watched: true},
// paths loaded via module imports
{pattern: 'app/components/**/*.js', included: false, watched: true},
{pattern: 'app/interfaces/*.js', included: false, watched: true},
{pattern: 'app/models/**/*.js', included: false, watched: true},
{pattern: 'app/services/**/*.js', included: false, watched: true},
// paths loaded via Angular's component compiler
// (these paths need to be rewritten, see proxies section)
{pattern: 'app/components/**/*.html', included: false, watched: true},
{pattern: 'assets/css/*.css', included: false, watched: true},
// paths to support debugging with source maps in dev tools
{pattern: 'app/*.ts', included: false, watched: false},
{pattern: 'app/components/**/*.ts', included: false, watched: false},
{pattern: 'app/interfaces/*.ts', included: false, watched: false},
{pattern: 'app/models/**/*.ts', included: false, watched: false},
{pattern: 'app/services/**/*.ts', included: false, watched: false},
{pattern: 'app/components/**/*.js.map', included: false, watched: false},
{pattern: 'app/interfaces/*.js.map', included: false, watched: false},
{pattern: 'app/models/**/*.js.map', included: false, watched: false},
{pattern: 'app/services/**/*.js.map', included: false, watched: false}
],
// proxied base paths
proxies: {
// required for component assests fetched by Angular's compiler
"/app/": "/base/app/"
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
})
}
使用 karma-test-shim.js
// Tun on full stack traces in errors to help debugging
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
// // 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/src/app/hero.service.js?f4523daf879cfb7310ef6242682ccf10b2041b3e'
var moduleName = appPath.replace(/^\/base\/app\/.*\/.*\//, './').replace(/\.js$/, '');
pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath]
return pathsMapping;
}, {})
}
}
});
System.import('angular2/testing').then(function(testing) {
return System.import('angular2/platform/testing/browser').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/src/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 /\.spec\.js$/.test(path);
}
使用gulpfile.js
编译ts文件(示例):
gulp.task('compile-components', function ()
{
del(config.components_source + '(?!.*\.spec\.js$)*.js');
return gulp
.src(config.components_source + '*.ts', { base: "." })
.pipe(debug())
.pipe(tsc(tsProjectComponents))
.pipe(gulp.dest("."));
});
步骤:
.ts
文件.spec.js
文件karma start karma.conf.js
关于javascript - Karma/Jasmine 问题与/Angular 2 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36308616/
我正在尝试在项目中学习和添加 Angular 国际化。我只能理解 Angular 文档 (https://angular.io/guide/i18n-overview) 的编译时翻译。 我需要这样的东
在我的 Angular 应用程序中,基于登录用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路由来授予或限制功能。 目前成功登录后,我的 .NET Core API 会返回一个 JWT token
我是 Angular 的新手,目前我已经看过 angular.io 网站提供的一些示例。但是在component decorator在文档中的解释,它指出 Angular components are
这里是service employee-service.service.ts的代码 import { Injectable } from '@angular/core'; import { HttpC
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
如何正确安装 PUG/JADE 到 Angular 2 或更高版本 这样在工作和 AOT 和 JiT 的同时 工作单元和集成测试 并且在创建每个新组件时不会受到太多影响 最佳答案 我看到了很多解决方案
我的 Angular 12 应用程序中有一些通用组件,我计划将其创建为一个 Angular 库,以便其他应用程序也可以使用它。我们有一些应用程序在较低版本的 angular(例如 angular 8/
tl;dr; ng build 删除了包含我编译的自定义库的/dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build 最终失败。我做错了什么? 我关注了documenta
我正在将一些“遗留”(非 typescript )js 库导入到我的 Angular SPA 中。 通常我只是从 cdn 添加一个负载到 index.html 就像: 在 Angular 分量中我只
我有这个 angular 应用程序,它基本上使用了库的概念。 我有 2 个名为 的库Lib1 和 lib2 根据他们所服务的微服务分组。 现在我将这些库导入主应用程序,即 应用1 事情一直到现在。 现
我在我的项目中启用了 angular Universal。我现在想完全删除它。我试图删除以下文件 /server.ts /webpack.server.config.js /src/tsconfig.
我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。 某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面
我正在尝试使用 angular、TypeORM、SQLite 和其他组件作为 webpack 构建 Electron 应用程序。 我从在 GitHub 上找到的示例开始我的开发:https://git
我在从 Angular 8 更新到 9 并运行时遇到以下错误 ng 更新@angular/material: Package "@angular/flex-layout" has an incompa
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在我的 h1 元素“之前”创建一个小的程式化三 Angular 形图案,但我无法正确地圆 Angular 。右上角没问题,但其他两个有剪裁问题。 这是输出以及形状的放大图像: 使用的代码如下: h
我有一个 Angular 元素,带有自定义标记名 - fancy-button。如何将 fancy-button 嵌入 Angular 应用程序? 我已经尝试了以下方法,但都没有用 - 在 index
我已将我的项目从 angular 5.2.9 升级到 angular 6.0.0-rc.5。 除了包路径中的几个快速 RxJS 修复外,一切看起来都不错。(此链接非常有用:Want to upgrad
我是一名优秀的程序员,十分优秀!