【问题标题】:mocha with expect is not working for testing errors [duplicate]带有期望的摩卡咖啡不适用于测试错误[重复]
【发布时间】:2015-04-18 07:50:50
【问题描述】:

在以下脚本中,只有一个测试通过。测试错误(抛出错误())失败并显示消息 1) 测试应该抛出错误:

var expect = require('chai').expect;
describe("a test", function() {
    var fn;
    before(function() {
        fn = function(arg){
            if(arg == 'error'){
                throw new Error();
            }else{
                return 'hi';
            } 
        }
    });

    it("should throw error", function() {
        expect(fn('error')).to.throw(Error);
    });
    it("should return hi", function() {
        expect(fn('hi')).to.equal('hi');
    });
});

如何改变期望测试错误?

【问题讨论】:

    标签: javascript node.js mocha.js chai


    【解决方案1】:

    expect()需要一个函数来调用,而不是函数的结果。

    将您的代码更改为:

    expect(function(){ fn("error"); }).to.throw(Error);
    

    【讨论】:

    • 不,文档是正确的。关键是您必须传入 Chai 将调用的函数对象。在您的示例中,您正在调用该函数,并将结果传递给expect()
    • 那为什么要期望(fn('hi')).to.equal('hi');有效吗?
    • 因为在这种情况下,您运行该函数并返回“hi”。然后将字符串传递给 expect(),并询问它是否等于另一个字符串。在测试抛出错误的情况下,这是无法完成的,因为除非调用它,否则期望无法捕获错误。
    • 如果我的回答现在适合你,你能接受吗?
    • 这也适用于should。仔细阅读文档,了解函数和函数调用返回值的区别
    【解决方案2】:

    如果你以 Node 方式执行错误优先回调,它看起来更像这样:

    var expect = require('chai').expect;
    
    describe("a test", function() {
      var fn;
      before(function() {
        fn = function(err, callback){
            if(err) throw new Error('failure');
    
            return callback();
        }
      });
    
      it("should throw error", function() {
        expect(fn('error')).to.throw(Error);
      });
      it("should return hi", function() {
        var callback = function() { return 'hi' };
        expect(fn(null, callback).to.equal('hi');
      });
    });
    

    【讨论】:

    • 你试过你的代码了吗?你的期望会失败。就像我在回答中所说的那样,它需要一个函数来调用,而不是函数的结果。
    猜你喜欢
    • 2013-05-24
    • 2014-07-28
    • 1970-01-01
    • 2018-10-31
    • 2012-07-06
    • 2015-07-18
    • 2016-05-02
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多