2014-01-17 60 views
1

我正在使用chaocha和mochajs進行單元測試。這是chaijs的文檔。 http://chaijs.com/api/bdd/在chaijs做關於expect.throw的單元測試的問題

根據文檔,它可以檢查函數是否拋出異常。 所以,使用此代碼:

var expect = require("chai").expect; 
describe("Testing", function(){ 
    var fn = function(){ throw new Error("hello"); }; 
    //map testing 
    describe("map", function(){ 
     it("should return error",function(){ 
      expect(fn()).to.not.throw("hello"); 
     }); 
    }); 
}); 

測試應該說 「通行證」 riht?它期待一個錯誤,並且函數fn正在給它。 但我發現了這一點:

11 passing (37ms) 
    1 failing 

    1) Testing map should return error: 
    Error: hello 
     at fn (/vagrant/projects/AD/tests/shared/functionalTest.js:13:29) 
     at Context.<anonymous> (/vagrant/projects/AD/tests/shared/functionalTest.js:17:11) 
     at Test.Runnable.run (/vagrant/projects/AD/node_modules/mocha/lib/runnable.js:211:32) 
     at Runner.runTest (/vagrant/projects/AD/node_modules/mocha/lib/runner.js:372:10) 
     at /vagrant/projects/AD/node_modules/mocha/lib/runner.js:448:12 
     at next (/vagrant/projects/AD/node_modules/mocha/lib/runner.js:297:14) 
     at /vagrant/projects/AD/node_modules/mocha/lib/runner.js:307:7 
     at next (/vagrant/projects/AD/node_modules/mocha/lib/runner.js:245:23) 
     at Object._onImmediate (/vagrant/projects/AD/node_modules/mocha/lib/runner.js:274:5) 
     at processImmediate [as _immediateCallback] (timers.js:330:15) 

我敢肯定,我在做一些愚蠢的事,或者忘記一些愚蠢的事,我還沒注意到。

任何人都可以看到我不能做的事嗎?或任何線索? 謝謝。

順便說一下,我使用的是node.js v0.10.22。

+0

嘗試'希望(FN).to.not.throw( 「你好」);' – vkurchatkin

+1

見我的回答摩卡節在這裏。 http://stackoverflow.com/a/14890891/1095114 – Noah

+0

謝謝諾亞,我給你留下了一條評論,因爲我想將不同的參數傳遞給fn()... – alexserver

回答

0

據我所知,我錯過了一些明顯的東西!我給函數調用fn()

這是成功的代碼

var expect = require("chai").expect; 
describe("Testing", function(){ 
    var fn = function(){ throw new Error("hello"); }; 
    //map testing 
    describe("map", function(){ 
     it("should return error",function(){ 
      expect(fn).to.throw("hello"); 
     }); 
    }); 
}); 
4

對任何其他人有麻煩測試從一個對象的方法引發的錯誤:

測試

與匿名函數調用包裝你的方法它會工作。

describe('myMath.sub()', function() { 
    it('should handle bad data with exceptions', function(){ 
     var fn = function(){ myMath.sub('a',1); }; 
     expect(fn).to.throw("One or more values are not numbers"); 
    }); 
}); 

對象方法

exports.sub = function(a,b) { 
    var val = a - b; 
    if (isNaN(val)) { 
     var err = new Error("One or more values are not numbers"); 
     throw err; 
     return 0; 
    } else { 
     return val; 
    } 
}