Jasmine和node.js

Bre*_*eak 18 javascript testing node.js jasmine

有一些Jasmine+Rhino组合来测试JavaScript代码并试图转移到node.js.但是,在网上找不到任何设置说明(但只有这个链接,几乎为零指令).任何有关如何使其成为真实的帮助(在Ubuntu上)将受到高度赞赏.

Mic*_*ley 28

当我第一次尝试使用jasmine-node时,我想到了同样的事情(关于文档).事实证明,实际上没有什么可以设置的 - 它就像RSpec或您可能习惯的其他测试工具一样.要将Jasmine与Node项目一起使用,请执行以下操作:

  1. 确保jasmine-node已安装并且您可以运行其可执行文件.
  2. 写下你的规格!我在这些步骤下面有一个示例规范.
  3. 使用命令运行您的规范jasmine-node specs/(specs/指向具有您的规范的目录).

而已!您可能会发现使用某种构建工具是有益的,例如cakeCoffeeScript或jake.

这是我最近使用jasmine-node的一个小项目的一部分规范的快速示例; 道歉,它是在CoffeeScript中.(顺便说一句:要针对CoffeeScript规范运行jasmine-node,请将--coffee选项传递给它.)

Chess   = require('../lib/chess')
Board   = Chess.Board
jasmine = require('jasmine-node')

describe "A chess board", ->
  beforeEach ->
    @board = new Board

  it "should convert a letter/number position into an array index", ->
    expect(Board.squares["a1"]).toEqual(0)
    expect(Board.squares["b1"]).toEqual(1)
    expect(Board.squares["a2"]).toEqual(16)
    expect(Board.squares["h8"]).toEqual(119)

  it "should know if an array index represents a valid square", ->
    expect(Board.is_valid_square 0).toBeTruthy()
    expect(Board.is_valid_square 7).toBeTruthy()
    expect(Board.is_valid_square 8).toBeFalsy()
    expect(Board.is_valid_square 15).toBeFalsy()
    expect(Board.is_valid_square 119).toBeTruthy()
    expect(Board.is_valid_square 120).toBeFalsy()
    expect(Board.is_valid_square 129).toBeFalsy()
    expect(Board.is_valid_square -1).toBeFalsy()

  it "should start off clear", ->
    for i in [0..127]
      if Board.is_valid_square(i)
        expect(@board.piece_on(i)).toBeNull()

  describe "#place_piece", ->
    it "should place a piece on the board", ->
      piece = jasmine.createSpy("piece")
      @board.place_piece "a1", piece
      expect(@board.piece_on "a1").toEqual(piece)

    it "should set the piece's location to the given square's index", ->
      piece = jasmine.createSpyObj(Piece, ["position"])
      @board.place_piece "b5", piece
      expect(piece.position).toEqual(65)
Run Code Online (Sandbox Code Playgroud)

[编辑]

您还可以spec_helperspecs/目录的根目录中添加文件(具有适合您项目的扩展名).这是我的内容,它为Jasmine添加了一个新的匹配器:

jasmine = require('jasmine-node')

beforeEach ->
 this.addMatchers
   toInclude: (should_include) ->
     for value in @actual
       return true if value == should_include
     false
Run Code Online (Sandbox Code Playgroud)

  • @BreakPhreak这取决于你的测试.如果你的测试代码**依赖于DOM,那么你需要为节点包含一个DOM库(比如Zombie.js).但是,大多数项目使用DOM但不关注DOM.在这种情况下,您可以对代码进行模块化,以便将DOM操作与要测试的函数分开,并仅测试jasmine规范中的非DOM功能.使用jasmine spies来存根/模拟DOM特定的函数也是合适的,这样在通过jasmine-node运行时不需要DOM支持(可以认为是最佳实践) (2认同)