【问题标题】:Mocha Chai regex are equalsMocha Chai 正则表达式是相等的
【发布时间】:2015-06-27 23:19:07
【问题描述】:

我正在尝试测试生成正则表达式的方法的行为。

使用 Mocha/Chai 测试套件我有以下代码:

describe('regexTest',function () {
  it('should return a regexp', function () {
    var regex = regexTest();
    assert.equal(regex, /someregex/);
  });
});

但是上面的代码好像不行。我在 chrome 控制台中尝试过:

/a/ == /a/ 
> false

目前我发现的唯一方法是比较两个正则表达式的toString(应该相等并且我可以比较):

describe('regexTest',function () {
  it('should return a regexp', function () {
    var regex = regexTest();
    assert.equal(regex.toString(), '/someregex/');
  });
});

您知道更好的方法吗?因为我觉得这不是很干净......

【问题讨论】:

    标签: regex node.js tdd mocha.js chai


    【解决方案1】:

    由于正则表达式是一个对象,你需要使用深度等于来比较两个正则表达式对象

    expect(/a/).to.be.deep.equal(/a/, 'should match')
    

    【讨论】:

      【解决方案2】:

      这是我测试文字正则表达式是否有效的方法:

      var assert = require('assert');
      
      describe('RegExp Test', function() {
        it('should return a valid RegExp', function() {
          var getSomeRegex = function() {
            return /someregex/;
          };
      
          var aRegex = getSomeRegex();
          assert.equal(aRegex instanceof RegExp, true);
        });
      
        it('should return a invalid Regexp', function() {
          var getInvalidRegex = function() {
            return '/something';
          };
      
          var aInvalidRegex = getInvalidRegex();
          assert.equal(aInvalidRegex instanceof RegExp, false);
        });
      });
      

      【讨论】:

      • 有趣,我会添加这样的验证。但是这篇文章的最初目的是检查两个正则表达式是否相等......
      【解决方案3】:

      有点晚了,但对于其他在 Google 上偶然发现这一点的人来说,Chai 的正常比较函数也适用于 Regexp 对象......

      const re = new RegExp( '^foo.*bar$', 'i' );
      re.should.eql( /^foo.*bar$/i );
      

      【讨论】:

      • .eql 是一个深度相等的比较,如@PirateApp 所述
      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      • 2010-09-07
      • 2016-04-23
      • 2010-10-25
      • 1970-01-01
      相关资源
      最近更新 更多