- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一个用 CommonJS 语法编写的 Angular 应用程序,并使用 grunt 任务和 grunt-contrib-requirejs 任务将源文件转换为 AMD 格式并将其编译成一个输出文件。我的目标是让 Karma 与 RequireJS 一起工作,并使我的源文件和规范文件保持 CommonJS 语法。
我已经能够通过具有以下文件结构的 AMD 格式的简单测试:
-- karma-test
|-- spec
| `-- exampleSpec.js
|-- src
| `-- example.js
|-- karma.conf.js
`-- test-main.js
和以下文件:
karma.conf.js
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
REQUIRE,
REQUIRE_ADAPTER,
'test-main.js',
{pattern: 'src/*.js', included: false},
{pattern: 'spec/*.js', included: false}
];
// list of files to exclude
exclude = [];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable / disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_DEBUG;
// enable / disable watching file and executing tests whenever any file changes
autoWatch = true;
// Start these browsers, currently available:
browsers = ['Chrome'];
// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
example.js
define('example', function() {
var message = "Hello!";
return {
message: message
};
});
exampleSpec.js
define(['example'], function(example) {
describe("Example", function() {
it("should have a message equal to 'Hello!'", function() {
expect(example.message).toBe('Hello!');
});
});
});
test-main.js
var tests = Object.keys(window.__karma__.files).filter(function (file) {
return /Spec\.js$/.test(file);
});
requirejs.config({
// Karma serves files from '/base'
baseUrl: '/base/src',
// Translate CommonJS to AMD
cjsTranslate: true,
// ask Require.js to load these files (all our tests)
deps: tests,
// start test run, once Require.js is done
callback: window.__karma__.start
});
但是,我的目标是用 CommonJS 语法编写源文件和规范文件并获得相同的结果,如下所示:
example.js
var message = "Hello!";
module.exports = {
message: message
};
exampleSpec.js
var example = require('example');
describe("Example", function() {
it("should have a message equal to 'Hello!'", function() {
expect(example.message).toBe('Hello!');
});
});
但是尽管将 cjsTranslate
标志设置为 true
,我还是收到了这个错误:
Uncaught Error: Module name "example" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded
at http://localhost:9876/adapter/lib/require.js?1371450058000:1746
关于如何实现这一点有什么想法吗?
编辑:我在 karma-runner 仓库中发现了这个问题:https://github.com/karma-runner/karma/issues/552并且有一些评论可能有助于解决这个问题,但到目前为止我还没有遇到任何运气。
最佳答案
我最终找到的解决方案涉及使用 grunt并编写一些自定义的 grunt 任务。过程是这样的:
创建一个 grunt 任务来构建 Bootstrap requirejs 文件,方法是使用文件模式查找所有规范,遍历它们并构建传统的 AMD 风格的 require block ,并使用如下代码创建一个临时文件:
require(['spec/example1_spec.js'
,'spec/example2_spec.js',
,'spec/example3_spec.js'
],function(a1,a2){
// this space intentionally left blank
}, "", true);
创建一个 RequireJS grunt 任务来编译上述引导文件并输出一个 js 文件,该文件将有效地包含所有源代码、规范和库。
requirejs: {
tests: {
options: {
baseUrl: './test',
paths: {}, // paths object for libraries
shim: {}, // shim object for non-AMD libraries
// I pulled in almond using npm
name: '../node_modules/almond/almond.min',
// This is the file we created above
include: 'tmp/require-tests',
// This is the output file that we will serve to karma
out: 'test/tmp/tests.js',
optimize: 'none',
// This translates commonjs syntax to AMD require blocks
cjsTranslate: true
}
}
}
创建一个手动启动 karma 服务器的 grunt 任务,并提供我们现在用于测试的单个已编译 js 文件。
此外,我能够在 karma.conf.js
文件中放弃 REQUIRE_ADAPTER
,然后只包含单个编译的 js 文件,而不是匹配所有模式的模式源代码和规范,所以现在看起来像这样:
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
REQUIRE,
'tmp/tests.js'
];
// list of files to exclude
exclude = [];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable / disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_INFO;
// enable / disable watching file and executing tests whenever any file changes
autoWatch = true;
// Start these browsers, currently available:
browsers = ['PhantomJS'];
// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = true;
在requirejs编译的grunt任务配置中,也需要使用almond为了开始测试执行(没有它测试执行会挂起)。您可以在上面的 requirejs grunt 任务配置中看到它的使用。
关于javascript - 使用 CommonJS 语法中的文件使用 Karma 和 RequireJS 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281211/
我正在一个环境中启动一个新项目,该环境对 require 模块具有 native CommonJS 支持 - 这是一个原子 shell 项目,不可能使用预编译步骤,例如在 Browserify 或 w
是否有任何标准方法可以在 CommonJS 环境中使用 Scala.js 应用程序作为库?如果没有,我可以为此目的修补生成的 js 文件吗? 最佳答案 Scala.js 0.6.13 及更高版本 把它
我正在寻找 Nashorn 的模块系统。据我所知,CommonJS 是处理 JS 模块的方法。我浏览了该列表( here 和 here ),发现 Java 的 CommonJS 实现方式很少。 Nar
背景 我有一个文件需要在两个存储库之间共享。该文件包含一个对象。 Repo A 设置为仅接受 commonjs 文件( require("/path/to/file") ),我无法轻松访问其 babe
我正在尝试使用 base58进口 buffer .我已经安装了两个: https://github.com/calvinmetcalf/rollup-plugin-node-builtins http
假设我想在我的项目(或任何给定的 npm 包)中使用 Immutable。我已经npm install编辑了它,所以它在node_modules中。当然,它有 CommonJS 导出。但是,我想在我的
我对模块化 JS 完全陌生,以前从未使用过任何模式。我正在编写一个项目,其中的代码多达 400 多行,我想通过将不同模块中的内容分开来更好地管理它。我选择使用 commonJS 模块,因为我已经使用了
在我看来,这个问题更接近commonJs,而不是titanium。我编写了一个大文件。相当丑陋(代码的第一次和平)。如果你愿意的话,你可以跳过它。 问题:我的代码中有 2 个 View ,我想将它们放
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在 websphere 中运行 spring 的 workmanager 任务执行器时收到异常。 以下是我的代码 我的 ConcurrentWorkManager 中的代码
因此,我出于常见原因(命名空间保护和依赖项处理(需要)以及公共(public) API 定义(导出))在个人项目中使用模块。我编写了自己的 require() 方法并使用标准模块模式 - 即: var
在这种情况下,在 CommonJS 模块内声明函数是否有良好的做法: // function foo() { ... } module.exports = function () { // fu
我想知道以下是否以及如何可能: CommonJS 环境,在 Node 和/或浏览器中使用的模块(带有 Browserify )。 两个(或更多)模块,每个返回一个单例,需要在应用程序的不同部分/模块中
这是我从 Flux architecture var AppDispatcher = require('../dispatcher/AppDispatcher'); var EventEmitter
我在创建声明文件 (d.ts) 时感到困惑。 例如,我创建了一个 NPM 包“a”(一个 CommonJS 模块 index.ts): export interface IPoint { x:
我正在从事 Angular2 项目。我浏览了 Angular2 aot 文档并且能够生成 ngFactory 文件。我按照文档中的建议使用了 rollup js。我有一些非 es6 npm 包。我已经
我不时听到 CommonJS http://www.commonjs.org/是创建一组模块化 javascript 组件的努力,但坦率地说,我从来没有理解过它。 我可以在哪里使用这些模块化组件?我在
我正在使用 React、TS 和 Webpack 堆栈开发应用。 我需要实现允许我的应用程序与客户端插件一起工作的功能 - js 文件覆盖某些类的现有功能。它可以从任何地方加载 - 本地文件系统或远程
现在,我使用 CommonJS 模块在脚本中设置一些全局变量,而不是在每个脚本中手动设置它们。 index.spec.js /*globals browser, by, element*/ requi
我想知道如何从另一个需要它的模块中增加一个 commonjs 模块。 假设我有三个文件,两个 commonjs 模块,如下所示: my-example-module.js function MyExa
我是一名优秀的程序员,十分优秀!