2017-10-15 66 views
1

我的快递服务器会引发一个错误,如果有参数缺失(例如,DB URI)。我想在摩卡测试它实际上抛出了错误,但我不知道如何让摩卡能做到这一点。摩卡测试明示启动

if(!parameters.db) { 
    throw new Error('Please provide a db URI'); 
} 

我有一个测试的设置是这样的:

it('Throws Error when no db URI provided in production mode', function() { 
    expect(require('../server')).to.throw(); 
    done(); 
}); 

当我快速的应用程序引发错误,该错误被扔进控制台和测试失败(事实上,它并没有结束)。


我的另一个问题是,如果环境处于生产模式,Express仅检查参数。我试图将测试套件中的流程环境设置为生产环境,但是当我运行它时,NODE_ENV仍然设置为“测试”。

before(function() { 
    env = process.env; 
    // This doesn't really set the environment when I run the tests. 
    process.env.NODE_ENV = 'production'; 
}); 

回答

1

如果你想测试是不是你的应用程序中处理尝试包装你调用一个try/catch,如果没有抛出的错误时返回错误的异常。

it('Throws Error when no db URI provided in production mode', function() { 
    let threwError = false; 
    try { 
    // create the server that throws the Error 
    require('../server'); 
    } catch (err) { 
    threwError = true; 
    } 
    expect(threwError, 'Didn\'t throw an error, when DB URI is empty').to.be.true; 
}); 
+0

感谢。解决方案的工作,但我已经更新你的代码修复了一些不起作用的部分,并使其更简单(在我看来)。 –

+1

这比较简单一些,但是你仍然有一个bug - 如果你想在try/catch之外expect()它,你需要在try/catch之外定义'threwError'。 – doublesharp