2015-10-13 15 views
13

vs Bizim kod temiz hale ve kod tekrarını önlemek için yardımcı olur, özel yasemin matchers olmak üzere oldukça büyük bir set geliştirdik. Ben özel yasemin matchers bazı === eşitlik test ve bazı jasmine.matchersUtil.equals kullanıldığını tespit ettik. Örnek:jasmine.matchersUtil.equals ===

toHaveHandCursor: function() { 
    return { 
     compare: function(actual) { 
      return { 
       pass: actual.getCssValue("cursor").then(function(cursor) { 
        return cursor === "pointer"; 
       }) 
      }; 
     } 
    }; 
}, 

toBeActive: function() { 
    return { 
     compare: function(elm) { 
      return { 
       pass: protractor.promise.all([ 
        elm.getId(), 
        browser.driver.switchTo().activeElement().getId() 
       ]).then(helpers.spread(function (currentElementID, activeElementID) { 
        return jasmine.matchersUtil.equals(currentElementID, activeElementID); 
       })), 
       message: "Element is not active." 
      }; 
     } 
    }; 
} 

Soru:

jasmine.matchersUtil.equals ve === eşitlik test ve yöntemi tercih edilmelidir arasındaki fark nedir?

Diğer bir deyişle, genel olarak, sadece === kullanıyorsak riskli miyiz? ===value ve type onun dayalı iki varlık karşılaştırır, Tanım olarak

:

cevap

7

Bildiğim kadarıyla ben anladığım kadarıyla, burada birkaç i jasmine.matchersUtil.equals ve === bulundu şeyler vardır. Onun bir strict karşılaştırma operatörü. Örneğin:

2 === 2 //true 
2 === 3 //false 
2 === '2' //false 
0 === -0 //true 

(Sample scenario where +0, 0 and -0 can appear)

Öte yandan, jasmine.matchersUtil.equals kendisine geçirilen tarafının eşit kabul edilmelidir eğer belirleyen bir mantığa dayalı underscorejs ve eşitlik için testlerin _.isEqual mantığa dayalı uygulanır bile onların types farklıdır. Böyle bir şey - İşte

jasmine.matchersUtil.equals(2, 2) //true 
jasmine.matchersUtil.equals(2, 3) //false 
jasmine.matchersUtil.equals(2, '2') //false 
jasmine.matchersUtil.equals(0, -0) //false 

git repo dan bunun bir ekstraktı var -

// Identical objects are equal. `0 === -0`, but they aren't identical. 
if (a === b) { return a !== 0 || 1/a == 1/b; } 

DÜZENLEME: jasmine.matchersUtil.equals() ait Katma avantajı biz aslında bizim kendi özel eşitlik test uygulayabilirsiniz olmasıdır, böylece sorunları yaratmak için düşünülen birkaç senaryo önlenebilir.

var customTester = function(first, second) { 
    return first == second; 
}; 

Az senaryoları - -

  1. unsuru metin boş veya bazı özel değere sahip olmadığını kontrol için bir ihtiyaç varsa varsayalım İşte aşağıda örneklerle kullanılan özel bir eşitlik test örneği verilmiştir kolay özel matchers kullanıyor nesnelerin eşitliğini kontrol etme

    "5" === 5 //if operation on elem returns "5" then custom matcher gives false 
    jasmine.matchersUtil.equals("5", 5, customTester) //true when implemented with custom equality testers 
    
    undefined === null //if operation on elem returns undefined then custom matcher gives false 
    jasmine.matchersUtil.equals("", null, customTester) //true when implemented with custom equality testers 
    
    NaN === NaN //if operation on elem returns NaN then custom matcher gives false 
    jasmine.matchersUtil.equals(NaN, NaN) //true 
    
  2. - ve sonra, bunun için geliştirilen özel bir yasemin eşleştirici yoktur.Örneğin:

    {name: 'hill'} === {name: 'hill'} //false 
    jasmine.matchersUtil.equals({name: 'hill'}, {name: 'hill'}) //true 
    
  3. Check for equality of element's return value with regular expressions is easier using custom matchers rather than implementing the logic using ===.

  4. Comparison of constructors is easier.

  5. Verification of errors is handled if an error occurrence needs to be tested by passing the error object to the custom matcher.

beklediğimizden biri yıllardan dışındaki farklı değerler olamayacağını biliyordu ne zaman Biz her zaman özel matchers kullanılan Bu ortaya çıkabilir veya yukarıdaki koşullardan herhangi biri oluşabilir. Beklentinin tek bir değer olması garantiliyse, === kullanımı anlamlıdır. Umarım yardımcı olur.