【问题标题】:Assert RegExp with Mocha and Chai用 Mocha 和 Chai 断言 RegExp
【发布时间】:2018-06-26 03:10:57
【问题描述】:

我需要断言一个应该返回常量 RegExp 的函数,其中模式和修饰符是固定的。摩卡怎么能做到这一点?

给定这样的测试代码:

var expect = require("chai").expect;

describe("myRegExp() function", function () {
    it("returns constant pattern", function () {

        expect(myRegExp()).to.equal(/somePattern/i);

    });
});

var myRegExp = function(){
    return /somePattern/i;
}

我们得到一个 AssertionError:

AssertionError: expected /somePattern/i to equal /somePattern/i
    at Context.<anonymous> (test/stackSnippetTest.js:6:31) 

【问题讨论】:

标签: javascript mocha.js chai assertions


【解决方案1】:
it("Compare Complex Objects", () => {
  let regex1 = /somePattern/i;
  let regex2 = /somePattern/i;
  assert.deepEqual(regex1, regex2);
  expect(regex1).to.deep.equal(regex2);
});

Deep Equals 是松散相等,而 assert.equal 是严格相等。类似于比较两个日期,或字符串"42" 和数字42。如果它是一个对象并且不是完全相同的对象,则必须使用 'deep' 限定符。

【讨论】:

    【解决方案2】:

    RegExp 可以转换为字符串。请参阅Edwin cmets、RegExp docs 以及此处converting RegExp to String then back to RegExp

    解决方法是使用RegExp.toString():

    var expect = require("chai").expect;
    
    describe("myRegExp() function", function () {
        it("returns constant pattern", function () {
    
            expect(myRegExp().toString()).to.equal(/somePattern/i.toString());
    
        });
    });
    
    var myRegExp = function(){
        return /somePattern/i;
    }
    

    效果很好。或者,同时断言 RegExp.source 和 RegExp.flags:

        expect(myRegExp().source).to.equal(/somePattern/i.source);
        expect(myRegExp().flags).to.equal(/somePattern/i.flags);
    

    【讨论】:

      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2016-08-07
      • 2021-01-21
      • 2023-04-02
      相关资源
      最近更新 更多