2011-10-02 20 views
18

Javascript kodunu test etmek ve node.js'a kaydırmaya çalışmak için bazı Jasmine+Rhino combo'ya sahip olun. Ancak, ağda herhangi bir kurulum talimatı bulamadı (ancak neredeyse sıfır yönergeye sahip sadece this bağlantısı). Bunu nasıl doğru yapacağınıza dair herhangi bir yardım (Ubuntu'da) çok takdir edilecektir.Jasmine ve node.js

cevap

28

Jasmine-node'u kullanmaya çalıştığımda aynı şeyi (belgelerle ilgili) düşündüm. Ancak ortaya çıktığı gibi, kurulacak neredeyse hiçbir şey yok - sadece RSpec ya da kullanabileceğiniz diğer test araçları gibi çalışıyor.

  1. jasmine-node yüklü olduğundan emin olun ve onun yürütülebilir çalıştırabilirsiniz: En Düğüm projesi ile Jasmine'i kullanmak için aşağıdakileri yapın.
  2. Ürünü özelliklerinizi yazın! Bu adımların altında örnek bir özetim var.
  3. Teknik özelliklerinizi kullanarak, jasmine-node specs/ (specs/ belirtimlerinizi içeren dizinin bulunduğu yeri) komutunu kullanarak çalıştırın.

Bu kadar! CoffeeScript veya jake için cake gibi bir tür oluşturma aracını kullanmanın yararını bulabilirsiniz.

Kısa bir süre önce jasmine düğümü kullandığım küçük bir projeden türlerin bir kısmının hızlı bir örneği; CoffeeScript'te olduğu için özür dilerim. (Bir kenara gibi: o --coffee seçeneği geçmek CoffeeScript özellikleri karşı yasemin-düğümünü çalıştırmak için.)

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) 

[Düzenle]

Ayrıca proje için uygun uzantılı (a spec_helper dosya ekleyebilir) specs/ dizininizin kökünde. İşte benim için yeni bir eşleştiriciyi ekleyen içeriğim:

+0

büyüleyici! sadece bir açıklama lütfen: javascript kodunun tarayıcıda (DOM modeli vb.) çalıştırılması gerekiyorsa, jasmine-node için herhangi bir eklemeye ihtiyacım var mı (demek 'Zombie.js': http://zombie.labnotes.org/)? – BreakPhreak

+2

@BreakPhreak Bu, testinizin ne olduğuna bağlı. Test kodunuz DOM'a ** bağlıysa, o zaman düğüm için bir DOM kütüphanesi eklemeniz gerekir (Zombie.js gibi). Bununla birlikte, çoğu proje DOM'ı kullanır ancak DOM'a odaklanmaz. Bu durumda kodunuzu modüle edebilir, böylece DOM manipulasyonlarını test etmek istediğiniz fonksiyonlardan ayırabilirsiniz ve sadece DOM olmayan özelliklerin jasmine spesifikasyonlarında testini yapabilirsiniz. Aynı zamanda jasmine casuslarının DOM'a özgü fonksiyonları taklit etmek/alay etmek için kullanılması da uygundur, böylece jasmine-node ile çalıştırıldığında DOM desteği gerekli değildir (en iyi uygulama olarak düşünülebilir) – Sukima

+0

@Sukima: teşekkürler! kodum aslında DOM'ı çok yoğun bir şekilde kullanıyor (ve parmak izlerinin altında temiz bir şekilde olmalı) – BreakPhreak