从Node使用Jasmine的正确方法是什么?

时间:2014-03-02 12:20:15

标签: javascript node.js jasmine jasmine-node

经过多次黑客攻击后,我设法通过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();

Jasmine "working"

编辑:在发货bootstrap.js中注意到这一点,基本相同(除了不同的命名)...所以也许这是正常的?!

It's not just me doing bonkers stuff!

2 个答案:

答案 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(来自茉莉维护者本身,最新版本)。

它们都很容易在命令行中使用,不需要代码(当然,测试除外!)。