我试图了解如何开发独立的Javascript代码。我想用命令行运行测试和模块编写Javscript代码。所以,我已经安装node.js
,并npm
伴随着图书馆requirejs
,underscore
和mocha
。
我的目录结构如下所示:
> tree .
.
├── node_modules
├── src
│ └── utils.js
└── test
└── utils.js
src/utils.js
我在用下面的代码编写的一个小模块在哪里:
> cat src/utils.js
define(['underscore'], function () {
"use strict";
if ('function' !== typeof Object.beget) {
Object.beget = function (o) {
var f = function () {
};
f.prototype = o;
return new f();
};
}
});
并且test/utils.js
是测试:
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils'], function(utils) {
suite('utils', function() {
test('should always work', function() {
assert.equal(1, 1);
})
})
});
然后,我尝试从顶级目录运行(因此mocha
看到该test
目录):
> mocha
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Calling node's require("../src/utils") failed with error: ReferenceError: define is not defined
at /.../node_modules/requirejs/bin/r.js:2276:27
at Function.execCb (/.../node_modules/requirejs/bin/r.js:1872:25)
at execManager (/.../node_modules/requirejs/bin/r.js:541:31)
...
所以我的问题是:
谢谢…
[对不起-暂时发布的错误代码结果;立即修复]
PS我之所以使用requirejs,是因为我以后也想从浏览器中运行此代码(或其中的一些代码)。
更新/解决方案
以下答案中未包含的内容是我需要mocha -u tdd
用于上述测试样式。这是最终测试(也需要断言)及其使用:
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils', 'assert'], function(utils, assert) {
suite('utils', function() {
test('should always work', function() {
assert.equal(1, 1);
})
})
});
> mocha -u tdd
.
✔ 1 tests complete (1ms)
您的测试未运行的原因是因为src/utils.js
它不是有效的Node.js库。
根据RequireJS文档,为了与Node.js和CommonJS
require标准共存,您需要在文件顶部添加一些样板,src/utils.js
以便define
加载RequireJS
函数。
但是,由于RequireJS被设计为能够要求“经典的”面向Web浏览器的源代码,因此我倾向于在我也要在浏览器中运行的Node.js库中使用以下模式:
if(typeof require != 'undefined') {
// Require server-side-specific modules
}
// Insert code here
if(typeof module != 'undefined') {
module.exports = whateverImExporting;
}
这样的优点是不需要其他Node.js用户使用额外的库,并且通常可以与客户端上的RequireJS一起使用。
一旦代码在Node.js中运行,就可以开始测试。我个人仍然喜欢Expresso而不是Mocha,尽管它是后继的测试框架。
问题内容: 标题几乎可以解释我所面临的问题。我正在尝试测试具有某种状态的组件,并且试图为该组件提供存储以获取所需的组件。当我使用Jest运行组件的测试时,出现以下错误: 我已经通过了一些读数确定,这是造成或者没有被正确适用于玩笑。但是,我尝试安装这两个软件包并重新运行,但结果没有变化。阅读Jest Github问题页面(删除babel- polyfill的自动包含#2755 )后,我发现Jest从
我得到以下错误时运行我的测试用例摩卡 有人知道为什么会这样吗? 包裹json physicalperson.spec.js 我所尝试的 我在SO中看到了一些线程,我也尝试了下面的代码,但出现了相同的错误。
这个标题很大程度上解释了我面临的问题。我试图测试一个具有某种状态的组件,并试图将我的存储提供给该组件以获取它需要的内容。当我使用Jest运行组件的测试时,我得到以下错误: 通过一些阅读,我确定这是由或未正确应用于Jest造成的。但是,我已经尝试安装这两个软件包并重新运行,结果没有变化。在阅读Jest Github问题页面(删除babel polyfill#2755的自动包含)后,我发现自版本19起
问题内容: var x int done := false go func() { x = f(…); done = true } while done == false { } 这是Go代码。我的恶魔告诉我,这是UB代码。为什么? 问题答案: Go Memory Model不保证该程序将始终遵守在goroutine中写入x的值。go常规销毁 部分中提供了一个类似的错误程序作为示例。 在本节中,G
问题内容: 发生了最奇怪的事情,我的测试运行正常,但现在不再,我完全没有更改代码,这里是一个例外: 问题答案: 我看到您正在使用Eclipse,但您是否还在使用其他外部构建/测试工具,例如Ant或Maven?有时,在同时使用其他外部工具时,Eclipse可能会不同步。 如果使用外部工具,请执行清理生成的工件所需的所有操作(例如mvn clean)。然后刷新Eclipse项目并按照前面的建议进行干净
我正在尝试测试一个空数据库/没有从数据库返回任何内容的场景。 我用mockito写了一个junit4测试类。有一个服务类和dao类是由mockito创建的。首先,我定义了“何时”方法,它起作用了。后来,我试着调用“when”方法,看看会发生什么,不管怎样,它工作了。为什么? 当myService.getDistinctObjectList()被调用时,myService类会调用myDao的所有四个