Жасмин и node.js

#javascript #testing #node.js #jasmine

#javascript #тестирование #node.js #жасмин

Вопрос:

Есть какая Jasmine Rhino -то комбинация для тестирования кода javascript и попытки перехода node.js . Однако не удалось найти никаких инструкций по настройке в сети (но только эта ссылка, с почти нулевыми инструкциями). Любая помощь о том, как сделать это правдой (на Ubuntu), будет высоко оценена.

Ответ №1:

Я подумал то же самое (относительно документации), когда впервые попытался использовать jasmine-node. Однако, как оказалось, настраивать практически нечего — он работает точно так же, как RSpec или другие инструменты тестирования, к которым вы, возможно, привыкли. Чтобы использовать Jasmine с вашим проектом Node, выполните следующие действия:

  1. Убедитесь jasmine-node , что он установлен и что вы можете запустить его исполняемый файл.
  2. Напишите свои технические характеристики! У меня есть пример спецификации ниже этих шагов.
  3. Запустите ваши спецификации с помощью команды jasmine-node specs/ (где specs/ указывает на каталог с вашими спецификациями).

Вот и все! Возможно, вам будет полезно использовать какой-нибудь инструмент сборки, например cake , для CoffeeScript или jake .

Вот краткий пример части спецификации из небольшого проекта, в котором я недавно использовал jasmine-node; извиняюсь, что это в CoffeeScript. (В качестве отступления: чтобы запустить jasmine-node в соответствии со спецификациями CoffeeScript, передайте ему эту --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)
  

[Править / править код]

Вы также можете добавить spec_helper файл (с соответствующим расширением для вашего проекта) в корень вашего specs/ каталога. Вот содержимое моего, которое добавляет новый подход к Jasmine:

 jasmine = require('jasmine-node')

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

Комментарии:

1. очаровательно! пожалуйста, еще одно уточнение: если мой код javascript должен запускаться в браузере (модель DOM и т. Д.), То нужны ли мне какие-либо дополнения к jasmine-node (скажем Zombie.js : zombie.labnotes.org )?

2. @BreakPhreak Это зависит от того, что вы тестируете. Если ваш тестовый код зависит от DOM, вам нужно будет включить библиотеку DOM для узла (например Zombie.js ). Однако большинство проектов используют DOM, но не ориентированы на DOM. В этом случае вы можете модулировать свой код так, чтобы у вас были манипуляции с DOM отдельно от функций, которые вы хотите протестировать, и тестировать только функции, отличные от DOM, в спецификации jasmine. Также целесообразно использовать шпионы jasmine для заглушки / макетирования специфичных для DOM функций, чтобы при запуске через jasmine-node не требовалась поддержка DOM (это можно считать лучшей практикой)

3. @Sukima: спасибо! мой код на самом деле очень интенсивно использует DOM (и должен иметь его под чистыми отпечатками пальцев)

4. @BreakPhreak Существуют библиотеки для тестирования dom. В вашем случае было бы уместно добавить библиотеку DOM к вашим тестам узлов. Если вам нравится jQuery, вы можете найти jasmine-jquery полезным.

5. @BreakPhreak Существуют библиотеки для тестирования dom. В вашем случае было бы уместно добавить библиотеку DOM к вашим тестам узлов. Если вам нравится jQuery, вы можете найти jasmine-jquery полезным.