2012-03-20 18 views
26

Bazı testleri mocha kullanarak çalıştırmaya çalışıyorum ancak bu hatanın üstesinden gelemiyorum. Sorunu yığını çağrısından söyleyebileceğimnodejs mocha suite hatası tanımlanmadı

E:\tdd\nodejs\cart>mocha cart.test.js 

node.js:201 
     throw e; // process.nextTick error, or 'err 
      ^
ReferenceError: suite is not defined 
    at Object.<anonymous> (E:\tdd\nodejs\cart\cart.test.js:5:1 
    at Module._compile (module.js:432:26) 
    at Object..js (module.js:450:10) 
    at Module.load (module.js:351:31) 
    at Function._load (module.js:310:12) 
    at Module.require (module.js:357:17) 
    at require (module.js:368:17) 
    at C:\Users\lex\AppData\Roaming\npm\node_module 
    at Array.forEach (native) 
    at load (C:\Users\lex\AppData\Roaming\npm\node_ 
9) 
    at Object.<anonymous> (C:\Users\lex\AppData\Roa 
in\_mocha:237:1) 
    at Module._compile (module.js:432:26) 
    at Object..js (module.js:450:10) 
    at Module.load (module.js:351:31) 
    at Function._load (module.js:310:12) 
    at Array.0 (module.js:470:10) 
    at EventEmitter._tickCallback (node.js:192:40) 

burada cart.test.js:5:1 olduğunu. Bunun nedenine dair bir fikrin var mı?

Teşekkür

cart.js

var GetTotalSum = function (input) { 
    var total = 0, 
     differentTitles = 0, 
     discountMap = [0, 1, 0.95, 0.9, 0.8, 0.75], 
     BOOK_PRICE = 8; 

    for (var i in input) { 
     total += input[i] * BOOK_PRICE; 
     if (input[i] > 0) { 
      differentTitles++; 
     } 
    } 

    if (differentTitles > 1) { 
     total = total * discountMap[differentTitles]; 
    } 

    return total; 
} 


module.exports.GetTotalSum = GetTotalSum; 

cart.test.js

var assert = require('assert'), 
    cart = require('./cart.js'); 


suite('cart', function() { 
    test('buy one book', function() { 
     // Arrange 
     var input = [1, 0, 0, 0, 0], 
      expected = 8; 

     // Act 
     var actual = cart.GetTotalSum(input); 

     // Assert 
     assert.equal(actual, expected);  
    }); 
}); 

cevap

53

yerine varsayılan, TDD arayüzü kullanmak için Mocha söylememe gerek BDD bir:

mocha --ui tdd card.test.js 
+0

teşekkürler. iyi çalışıyor. Tdd arabirimini varsayılan olarak belirtmenin herhangi bir yolu var mı? – thedev

+1

'mocha.opts' dosyasını kullanın, ayrıntılar için bkz. Http://visionmedia.github.com/mocha/. – Domenic

+0

Bunu dinamik olarak nasıl yaparsınız? Testlerimi her kurtarışta yapıyorum, bu da gulp yoluyla ayarlanıyor. Hem BDD hem de TDD testlerini çalıştırıyorum – PositiveGuy

3

Ayrıca projede bir Makefile dahildir ve şöyle TDD belirtebilirsiniz:

test: 
    @./node_modules/.bin/mocha -u tdd 

.PHONY: test 

Şapka ipucu: DailyJS

3

sadece mocha -u tdd belirterek aynısını yapabilirsiniz package.json içinde

"scripts": { 
"start" : "node server",  
"test": "mocha -u tdd" 
}