nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比較

     最近node項目中遇到使用斷言測試程序,看了下nodejs的api之後,對nodejs中assert斷言的幾個方法做個簡單的記錄。

1 equal()

  • equal(actual,expected[,message])

相當於使用 == 運算符比較兩個參數值actualexpected是否相等,如果相等不返回任何值,如果不相等則返回帶有message屬性的AssertionError,若message爲undefined,則爲默認的錯誤信息。

var assert = require('assert');

assert.equal('1','1');//通過 '1' == '1'

assert.equal('1',1);//通過,'1' == 1

assert.equal('q','q');//通過

assert.equal('abc','abc');//通過 

assert.equal('a','b');//不通過,拋出AssertionError

assert.equal([1,2],[1,2]);//不通過,不能比較數組

assert.equal({a:'string'},{a:'string'});//不通過,不能比較json數據等
  • == 運算符只是數值相等,並不比較類型相等
  • equal()方法不能比較數組,json等數據類型的數據,換句話說即不進行深度比較,數組和json數據的子對象不進行比較。

2 strictEqual()

  • strictEqual(actual,expected[,message])

從字面意思來看,就是equal()方法的嚴格版本,相當於===全等運算符,不僅比較數據值是否相等,還比較數據類型是否相同。跟equal()方法最大的不同就是這點。

var assert = require('assert');

assert.strictEqual('1',1);//不通過

assert.strictEqual(1,1);//通過 

assert.strictEqual('a','a');//通過

assert.equal('abc','abc');//通過 

assert.equal('a','b');//不通過,拋出AssertionError

assert.equal([1,2],[1,2]);//不通過,不能比較數組

assert.equal({a:'string'},{a:'string'});//不通過,不能比較json數據等

可以看到,這跟equal()方法得出的結果是不同的,比較要嚴格一些,其他地方都相同。

3 deepEqual()

  • deepEqual(actual,expected[,message])

前面不管是equal()方法還是strictEqual()都不能進行深度比較,對數組或者json數據格式的數據不能比較相同與否,使用此方法將可以完美解決這個問題。

var assert = require('assert');

assert.deepEqual([1,2],[1,2]);//通過,數組比較

assert.deepEqual({a:'1'},{a:'1'});//通過

assert.deepEqual([[1,2],[2]],[[1,2],[2]]);//通過,多維數組

assert.deepEqual({a:{b:1}},{a:{b:1}});//通過

assert.deepEqual(1,'1');//通過

assert.deepEqual([1],['1']);//通過
  • deepEqual()方法能夠比較數組和json等數據,也能比較一般數據,能夠進行更爲深層次的數據比較。
  • deepEqual()方法比較並不嚴格,相當於 == 等於符號,只比較數值,不比較類型

4 strictDeepEqual()

  • strictDeepEqual(actual,expected[,message])

strictEqual()方法相似,相當於=== 全等運算符,不同的是能夠比較數組、json數據等深層的數據。

var assert = require('assert');

assert.deepEqual([1,2],[1,2]);//通過,數組比較

assert.deepEqual({a:'1'},{a:'1'});//通過

assert.deepEqual([[1,2],[2]],[[1,2],[2]]);//通過,多維數組

assert.deepEqual({a:{b:1}},{a:{b:1}});//通過

assert.deepEqual(1,'1');//不通過,類型錯誤

assert.deepEqual([1],['1']);//不通過 ,類型錯誤
  • deepStrictEqual()方法比deepEqual()更爲嚴格,其他都相同。都能進行深層比較。

5 其他方法

assert模塊中還有很多其他很有用的方法,下面列舉幾個,具體的請看
Nodejs API

  • assert.notEqual(actual,expected[,message])
  • assert.notStrictEqual(actual,expected[message])
  • assert.ifError(value)
  • assert.fail(message)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章