Javascript 什么';从Node使用Jasmine的正确方法是什么?
经过多次黑客攻击,我终于通过Node运行了一个简单的Jasmine测试 然而,有一些奇怪的事情我不明白。。。jasmine文件导出的函数似乎需要将自身的引用传递回工作中(这适用于jasmine和ConsoleReporter) 我确信这不是正确的方法(尽管我很高兴我最终运行了一些测试:),那么有人能解释一下更好的方法吗 (注意:我对引入更多像node jasmine这样我不懂的第三方代码不感兴趣;我想了解我现在拥有的东西;不要添加更多!) 编辑:在附带的Javascript 什么';从Node使用Jasmine的正确方法是什么?,javascript,node.js,jasmine,jasmine-node,Javascript,Node.js,Jasmine,Jasmine Node,经过多次黑客攻击,我终于通过Node运行了一个简单的Jasmine测试 然而,有一些奇怪的事情我不明白。。。jasmine文件导出的函数似乎需要将自身的引用传递回工作中(这适用于jasmine和ConsoleReporter) 我确信这不是正确的方法(尽管我很高兴我最终运行了一些测试:),那么有人能解释一下更好的方法吗 (注意:我对引入更多像node jasmine这样我不懂的第三方代码不感兴趣;我想了解我现在拥有的东西;不要添加更多!) 编辑:在附带的bootstrap.js中注意到了这一点
bootstrap.js
中注意到了这一点,它基本上是相同的(除了不同的命名)。。。所以这可能是正常的
Pivatol最近在2.0版中添加到Jasmine中,并计划发布一个官方NPM包。现在,您可以按照自己的实现从节点使用它
以下是对您编写的代码封面下发生的事情的简要解释:
jasmine=jasmine.core(jasmine)代码>当您最初需要('jasmine')时,您将返回一个函数getJasmineRequiredObj();通过调用jasmine.core(jasmine),您可以告诉jasmine使用nodeexports
语句返回其行为方法,而不是将它们添加到window.jasmineRequire对象中
jasmineConsole.console(jasmineConsole,jasmine)
jasmine分别初始化它的核心功能和它的报告程序。这句话基本上和jasmine.core(jasmine)是一样的,只适用于console reporter
还有(仍然使用jasmine 1.3,并且有一个jasmine 2.0的测试版-2015年2月)和(来自jasmine维护者自己,最新版本)
它们都可以从命令行轻松使用,不需要任何代码(当然,测试除外!)。你是说我所做的是在浏览器之外使用它的正确方法吗?看起来很奇怪,好像我预感到了什么!我查看了节点jasmine,但它似乎包含大量代码,我不明白为什么(似乎jasmine应该支持在节点中运行,而不需要做很多工作);我不确定它是否由茉莉花的作者维护。如果这看起来不疯狂,我现在就坚持下去!节点支持似乎是2.0的新功能。我希望在1.3.x中需要所有这些额外的代码!该页面的链接看起来和我找不到的完全一样——boot.js的节点版本!我会换成那个,应该更干净!谢谢(可能值得在您的答案中添加一个指向node_suite.js的链接,以便其他人更容易找到它!)
// 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();
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.
};