经过多次黑客攻击后,我设法通过Node运行简单的Jasmine测试。
然而,有些奇怪的东西我不明白......茉莉花文件导出函数似乎需要对自己的引用传回工作(这适用于Jasmine和ConsoleReporter)。
我确定这不是正确的方法(虽然我很高兴我终于做了一些测试运行:)),那么有人可以解释更好的方法来做到这一点吗?
(注意:我不想引入更多第三方代码,我不理解像node-jasmine;我想了解我现在拥有的东西;不要添加更多!)
// Include stuff
jasmine = require('../../../Apps/Jasmine/jasmine-standalone-2.0.0/lib/jasmine-2.0.0/jasmine.js');
jasmineConsole = require('../../../Apps/Jasmine/jasmine-standalone-2.0.0/lib/jasmine-2.0.0/console.js')
// WHAT THE? I DON'T EVEN KNOW WHAT THIS MEANS
jasmine = jasmine.core(jasmine);
jasmineConsole.console(jasmineConsole, jasmine)
// Set up the console logger
jasmine.getEnv().addReporter(new jasmine.ConsoleReporter({ print: console.log }));
// Create some global functions to avoid putting jasmine.getEnv() everywhere
describe = jasmine.getEnv().describe;
it = jasmine.getEnv().it;
expect = jasmine.getEnv().expect;
// Dummy tests
describe("A suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
});
it("contains spec with a failing expectation", function() {
expect(true).toBe(false);
});
});
// Kick off execution
jasmine.getEnv().execute();
编辑:在发货bootstrap.js
中注意到这一点,基本相同(除了不同的命名)...所以也许这是正常的?!
答案 0 :(得分:6)
Pivatol最近在2.0中向Jasmine添加了better node.js support,并计划发布官方NPM包。现在,您可以按照自己node test suite中使用的实现从节点中使用它。
以下是对您编写的代码中幕后内容的简要说明:
jasmine = jasmine.core(jasmine);
当你最初需要('jasmine')时,你会得到一个函数getJasmineRequiredObj();通过调用jasmine.core(jasmine),您告诉jasmine使用节点exports
语句返回它的行为方法,而不是将它们添加到window.jasmineRequire对象。
https://github.com/pivotal/jasmine/blob/master/src/core/requireCore.js
function getJasmineRequireObj() {
if (typeof module !== 'undefined' && module.exports) {
return exports;
} else {
window.jasmineRequire = window.jasmineRequire || {};
return window.jasmineRequire;
}
}
// jRequire is window.jasmineRequire in a browser or exports in node.
getJasmineRequireObj().core = function(jRequire) {
var j$ = {};
jRequire.base(j$);
j$.util = jRequire.util();
j$.Any = jRequire.Any();
...
return j$; // here is our jasmine object with all the functions we want.
};
jasmineConsole.console(jasmineConsole, jasmine)
Jasmine将其核心功能与其记者分开进行初始化。该声明与jasmine.core(jasmine)基本相同,仅适用于控制台记者。
https://github.com/pivotal/jasmine/blob/master/src/console/requireConsole.js
答案 1 :(得分:3)
还有jasmine-node(仍使用jasmine 1.3并且测试版带有jasmine 2.0 - 2015年2月)和jasmine-npm(来自茉莉维护者本身,最新版本)。
它们都很容易在命令行中使用,不需要代码(当然,测试除外!)。