javascript - 如何在预期失败时截获错误 jasmine 和 frisby?

  显示原文与译文双语对照的内容
0 0

我正在使用 frisby.js 创建HTTP测试,它在 jasmine.js. 之上工作

我还必须创建一些mongoDB对象来测试。 问题是当我想清理这些数据库对象时。 当预期失败时,我想拦截它并调用自己的清理函数。 这意味着每次失败测试后,我将无法从数据库中删除测试对象。

jasmine 中的afterEach函数不能正常工作,jasmine 也没有对afterAll或者beforeAll的支持。 这就是我今天做这些测试的原因。

it("testing userform get with correct userID and expect correct return", function() {
 var innerUserId = userID;
 frisby.create('Should retrieve correct userform and return 200 when using a valid userID')
. get(url.urlify('/api/userform', {id: innerUserId}))
. expectStatus(200)
. afterJSON(function(userform){
//If any of these fail, the after function wont run.
//I want to intercept the error so that I can make sure that the cleanUp function is called
//afterEach does not work. I have tried with done()
 var useridJSON = userform.UserId.valueOf();
 var firstnameJSON = userform.firstname.valueOf();
 var surnameJSON = userform.surname.valueOf();
 expect(firstnameJSON).toMatch(testUser.firstName);
 expect(surnameJSON).toMatch(testUser.surname);
 expect(useridJSON).toMatch(innerUserId);
 })
. after(function(){
 cleanUp(innerUserId);
 })
. toss();
});

我想知道是否有方法在frisby或者 jasmine 中截取"expect"的错误,以便在退出之前我可以以调用自己的清理功能。

这里是完整的示例

时间:原作者:2个回答

0 0

对于"退出前",该如何:

process.on('uncaughtException', function(err) {
 console.error(' Caught exception: ' + err);
});
原作者:
0 0

解决这个问题最快的办法是将错误代码包装在 try-catch 。 这是因为如果发生javascript错误,jasmine 将不会继续运行断言。 这与断言错误不同。 如果出现断言错误,jasmine 和frisby将继续测试所有其他断言,然后执行"后"-function 。

. afterJSON(function(userform){
 try {
 var useridJSON = userform.UserId.valueOf();
 var firstnameJSON = userform.firstname.valueOf();
 var surnameJSON = userform.surname.valueOf();
 catch(e) {
 cleanUp(innerUserId);
//Can do a throw(e.message); here aswell
 }
 expect(firstnameJSON).toMatch(testUser.firstName);
 expect(surnameJSON).toMatch(testUser.surname);
 expect(useridJSON).toMatch(innerUserId);
 })

这不是最好的方法但是。

最后添加了 throw(e) 并将期望放在 finally 范围内。 这样我就得到 jasmine 来显示测试中出现的所有错误。

原作者:
...