Should.js - equals方法中的不一致应该等于

时间:2016-03-06 23:39:14

标签: javascript equals should.js

我使用了should.js框架(v8.2.x)进行单元测试,并且一直在玩一些非常基本的测试。但是,由于测试失败,我遇到了这个问题,这让我很难过。

我将这个虚拟函数定义为测试add

var add = function(a, b) {
  if (isNaN(a) || isNaN(b)) {
    throw new Error('One of the arguments is not a number');
  }
  return +a + +b
};

现在我的虚拟测试:

should.equal(add('1', '1'), '2');   // passes
add('1', '1').should.equal('2')     // fails!

现在根据他们的githubshould(something)something.should通常会返回相同的内容,但没有关于差异的其他信息。

根据他们的API documentationshould.equalassert.equal相同。但是这个测试通过了我:

assert.equal(add('1','1'), '2'); // passes

所以我有三个问题:

  1. 为什么add('1', '1').should.equal('2')没有通过?
  2. 为什么两种用法会产生不同的结果?
  3. 为什么文档说should.equalsassert.equals实际上有不同的行为时相同?

1 个答案:

答案 0 :(得分:0)

回答你的问题和你的错误。

  

现在根据他们的github,应该(某事)和某事。通常会返回相同的东西,但是没有关于差异的额外信息。

should(something)something.should通常是相同的。但是你使用了should.equal,docs没有说它与其他方法的公平性。只有copy of node.js拥有assert.equal

  

为什么添加('1','1')。should.equal('2')不通过?

因为docs明确表示它在内部使用===。

  

为什么两种用法会产生不同的结果?

因为这是不同的方法,并且没有地方说它应该是平等的。

  

为什么文档说we.equals与assert.equals实际上有不同的行为时相同?

$ node
> var should = require('.')
undefined
> var assert = require('assert')
undefined
> var add = function(a, b) {
...   if (isNaN(a) || isNaN(b)) {
.....     throw new Error('One of the arguments is not a number');
.....   }
...   return +a + +b
... };
undefined
> should.equal(add('1', '1'), '2');
undefined
> assert.equal(add('1', '1'), '2');
undefined

所以要尝试清除你的错误:在should.js中存在should.equal(a, b),它与assert.equal相同。同样存在something.should.equal(other)内部使用===(因为存在.eql进行深度相等检查),should(somethng).equal(other)也与something.should.equal(other)相同(但不适用于标准包装)。

希望它能说清楚。