9

经过多次黑客攻击,我设法通过 Node.js 运行了一个简单的 Jasmine 测试。

但是,有一些奇怪的东西我不明白...... 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时注意到这一点,基本上是相同的(除了不同的命名)......所以这可能是正常的?!

不只是我在做疯狂的事情!

4

2 回答 2

6

Pivatol 最近在 2.0 中为 Jasmine 添加了更好的 node.js 支持,并计划发布官方 NPM 包。现在,您可以按照他们自己的节点测试套件中使用的实现从节点使用它。

以下是对您编写的代码的幕后情况的简要说明:

jasmine = jasmine.core(jasmine); 当您最初 require('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

于 2014-03-02T13:53:46.180 回答
3

还有jasmine-node(仍然使用 jasmine 1.3,并且有一个带有 jasmine 2.0 的 beta 版本 - 2015 年 2 月)和jasmine-npm(来自 jasmine 维护者自己,具有最新版本)。

它们都可以从命令行轻松使用,无需代码(当然测试除外!)。

于 2015-02-09T09:30:38.053 回答