当前位置: 首页 > 知识库问答 >
问题:

如何在预期失败时拦截错误?Jasmine和frisby

濮君植
2023-03-14

我正在用frisby创建HTTP测试.js它可以在jasmine.js之上工作。

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

jasmine中的后每个函数不能正常工作,jasmine还不支持后所有或前所有。这就是为什么我今天进行测试的原因。

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个答案

徐兴昌
2023-03-14

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

process.on('uncaughtException', function(err) {
  console.error(' Caught exception: ' + err);
});
金亦
2023-03-14

这个问题的最快解决方案是将错误代码包装在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),并将期望放在最终的作用域中。通过这种方式,我让茉莉花呈现测试中发生的所有错误。

 类似资料:
  • 我正在开发一个可以在NFC标签上读写的Android应用程序。我在阅读我已经写了东西的标签时没有问题,但是当我使用空白标签时,我很难在十六进制代码中读取标签的 UID。 我正在使用mi的经典标签,我直接在十六进制中使用readlock方法读取UID。奇怪的是,它在调试器模式下运行得很好,我在调试器模式下获取UID。但是当我在没有debuger的情况下尝试时,我得到了以下异常: 下面是我读入标签的方

  • 我有一个通过SOAP-Endpoint发送消息的Camel路由。

  • 我使用的是Spring boot 2.2.9,我在获取401 HTTP错误的入口点时遇到问题,我正在尝试更改响应的行为,就像我们可以使用Spring错误处理程序(ResponseEntityExceptionHandler类)处理其他HTTP错误一样,谢谢

  • 放心,当我们这样做时 抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。 此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。 是否有任何方法来构建或设置类似于我们如何实现<code>过滤器 我有一个 rest api 框架,其中大多数验证都是使用

  • 拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数

  • 问题内容: 我看到 一吨 的条目在我的Tomcat日志(样品粘贴下面)。这些在几个月前进行次要版本升级(Spring Security 4.2.4,IIRC)后开始出现在我的日志文件中,因此,这显然是默认情况下启用的Spring新安全功能。这里报告了类似的问题,但是我的问题专门涉及如何在控制器中拦截这些异常。有一个针对此问题的Spring Security错误记录(提供一种处理RequestRej