【发布时间】:2017-03-04 05:50:23
【问题描述】:
我有一个带有 firebase-server 模块实例的测试套件,在测试套件和另一个单独的函数中都被调用。
这样我就可以在我的 firebase 实例中使用模拟值测试各种测试用例。
在我的测试套件中,我执行了各种测试,它们都按预期工作,直到我达到我正在测试 Firebase 承诺的程度:
Firebase.database().ref('userData').once('value').then((data) => {
// --- USER ID VALIDATION ---//
if (!userIds[USER_ID]) {
throw(`Invalid User ID: ${USER_ID}`);
}
updates[`${USER_ID}/sessions/${newSessionKey}`] = event.session;
// --- UPDATE DATABASE ---//
Firebase.database().ref().update(updates)
.then(() => context.succeed('Database Write Successful.'))
.catch(error => context.fail(`Database Write Error: ${error}`));
})
.catch(error => context.fail(`Database Access Error: ${error}`));
通过模拟数据库内容使我对 lambda 函数的调用失败:
it( 'should fail invocation with invalid user Id: ', function( done ) {
var context = {
succeed: function() {
done( new Error( 'never context.succeed' ) );
},
fail: function( errorMessage ) {
expect( errorMessage ).to.have.string("Invalid User ID");
done( );
}
}
dbReset();// resetting database state to valid format
Firebase.database().ref('userData').set({
"InvalidFakeUserID" : {
"apiHits" : 100
}
})
myLambda( event, context );
});
现在,我知道 lambda 函数正在返回错误,但我不知道如何在测试端处理错误断言。当我试图期待一个特定的字符串时,它每次都通过测试,无论我期待什么字符串。如果我期望出现错误:
fail: function( errorMessage ) {
expect( errorMessage ).be.an('error');
done( );
}
它也会触发错误:
(node:12144) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): AssertionError: expected 'Opearlo Analytics --- Database Access Error: Error: Invalid Voice App Name: fakeNameNotPresentOnDB' to be an error
谁能指出我正确的方向?
【问题讨论】:
-
“在功能方面”?
-
你说得对,我猜是含蓄的,我要修改措辞。
标签: node.js unit-testing firebase promise mocha.js