期望失败时如何拦截错误?茉莉花和弗里斯比

时间:2014-10-17 12:04:06

标签: javascript node.js testing jasmine

我正在使用frisby.js创建HTTP测试,该测试适用于jasmine.js。

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

jasmine中的afterEach函数无法正常工作,jasmine对afterAll或之前的所有功能都没有任何支持。 这就是我今天进行测试的原因。

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”的错误,这样我就可以在退出之前调用我自己的清理函数。

完整示例here

2 个答案:

答案 0 :(得分:1)

解决此问题的最快方法是将错误代码包装在try-catch中。 这是因为如果发生javascript错误,jasmine将不会继续运行断言。这与断言错误不同。如果发生断言错误,jasmine和frisby将继续测试所有其他断言,然后执行“after”功能。

        .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)并将期望放在了最终范围内。这样我就得到了jasmine来呈现测试中出现的所有错误。

答案 1 :(得分:0)

至于“退出前”,这个怎么样:

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