2015-08-27 23 views
34

Hiç bir zaman ulaşılmaması gereken bir sınama kodum varsa (örneğin, bir söz dizisinin fail maddesi), sınamaya nasıl zorlanabilirim?Bir Jasmine testine zorla girme

expect(true).toBe(false); gibi bir şey kullanıyorum ancak bu hoş değil. Bu seçenek, testi önlemek için beklemek istediğim zaman aşımını bekler (çünkü yavaştır).

cevap

42

Yasemin Spec blokları it() içine kullanılabilecek bir küresel yöntem fail() sağlar ve ayrıca özel hata mesajı kullanmasını sağlar:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    fail('Unwanted code branch'); 
    }); 
}); 

Bu Yasemin işlevselliği yerleşik ve o kıyasla her yerde çalışıyor Aşağıda bahsettiğim 'hata' yöntemi.

güncelleme Önce: O kod daldan bir hata atabilir

, hemen bir spec başarısız olur ve özel hata mesajı mümkün olacak:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    throw new Error('Unwanted code branch'); 
    }); 
}); 

Ama Eğer Promise başarı işleyicisi then() bir hata atmak istiyorsanız hata orada yutulacaktır ve yukarı gelmeyecek, çünkü, dikkatli olmalıdır. Ayrıca, uygulamanızdaki bu hatayı yakalayabilecek olası hata işleyicilerinden haberdar olmalısınız. Bu nedenle, bir testin başarısız olmasına neden olamayacaktır.

+7

Ayrıca, done.fail ('message') 'vardır. – TrueWill

+1

Yasemin'in eski bir sürümünde sıkışmış olanlar için 'başarısız' yöntemi 1.3'te mevcut değildir, ancak yeni bir hata (mesaj) 'atarak etkili bir şekilde doldurulabilir. Etkililik, test koşucunuza bağlı olabilir - aynı zamanda beklemede ('[başarısızlık sebebi]') .eBeNull() 'gibi bir şey düşünün. – ryanwebjackson