簡體   English   中英

如何在javascript中捕獲斷言錯誤?

[英]How to catch assertion error in javascript?

try/catch塊與 expect 一起使用時,如果 expect 失敗,則不會捕獲錯誤。 有沒有辦法在javascript中捕獲斷言錯誤? 代碼示例:

try {
  expect(2).toBe(3);
} catch (error) {
  console.log(error);
}

您可以制作自定義匹配器

例如

const customMatchers = {
  toBeWithThrow(matchersUtil) {
    return {
      compare: function (actual, expected) {
        const result = {};
        result.pass = matchersUtil.equals(actual, expected);
        if (result.pass) {
          result.message = 'Expected ' + actual + ' to be ' + expected;
        } else {
          throw new Error('Expected ' + actual + ' to be ' + expected);
        }
        return result;
      },
    };
  },
};

describe('54601177', () => {
  beforeEach(function () {
    jasmine.addMatchers(customMatchers);
  });
  it('should pass', () => {
    expect(2).toBeWithThrow(2);
  });
  it('should pass too', () => {
    try {
      expect(2).toBeWithThrow(3);
    } catch (error) {
      console.log(error);
    }
  });
});

測試結果:

Executing 2 defined specs...
Running in random order... (seed: 09363)

Test Suites & Specs:

1. 54601177
⠋    should pass tooError: Expected 2 to be 3
    at compare (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/src/stackoverflow/54601177/index.test.js:10:17)
    at Expector.compare (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:3969:27)
    at Expectation.toBeWithThrow (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:3659:34)
    at UserContext.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/src/stackoverflow/54601177/index.test.js:27:17)
    at QueueRunner.attempt (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7063:44)
    at QueueRunner.run (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7104:25)
    at runNext (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7023:18)
    at next (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7030:11)
    at QueueRunner.onComplete (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:6924:9)
    at Immediate._onImmediate (/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:7120:12)
   ✔ should pass too (14ms)
   ✔ should pass (1ms)

>> Done!


Summary:

👊  Passed
Suites:  1 of 1
Specs:   2 of 2
Expects: 1 (0 failures)
Finished in 0.024 seconds

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM