2012-05-28 1 views
17

私はBackboneJSを使ってWebアプリケーションでJasmineを使ってユニットテストを書いています。
どのようにこのような方法で値をチェックするかを示す例がたくさんあります:値が整数かjasmine.jsの文字列かどうかをチェックする方法は?

 it("should set the id property to default value", function() 
     { 
      expect(this.task.get("id")).toEqual(null); 
     }); 

しかし、属性はジャスミンを使ってJavaScriptで数値または文字列があるかどうかあれば私がチェック任意の例を見つけることができません。

このような確認は適切ですか?
「はい」の場合、それを行う正しい方法は何ですか?

例:idが0より大きい整数であるかどうかを確認したいと思います。どのようにしてJasmineで作成できますか?

+0

'123" 'を整数または文字列と見なしますか?これは実際にはIntegerのString表現であるためです。 – fguillen

答えて

8

私はこのようなものになるだろう:

describe("when instantiated", function() 
    { 
     it("should exhibit attributes", function() 
     { 
      ..... 
      expect(this.task.get("id")).toMatch(/\d{1,}/); 
      ..... 
     }); 
    }); 
我々はそれを考慮している場合は
+7

この正規表現は '' wadus12wadus '' – fguillen

+1

を検証し、その問題を軽減するために/^\ d {1、} $/ – neXus

+0

を使用してください。単に '/ \ d + /' haha – Jay

2
expect(this.task.get("id")).toBeGreaterThan(0); 

:正直なところ

expect(1).toBeGreaterThan(0); // => true 
expect("1").toBeGreaterThan(0); // => true 
expect("a").toBeGreaterThan(0); // => false 
3

が、私は適切な方法が何であるかを知っているが、私はありませんそのようなものを書くでしょう:

it("should set the id property to default value", function() { 
     var id = this.task.get("id"); 
     expect(typeof id).toEqual('number'); 
     expect(id).toBeGreaterThan(0); 
}); 
58

後継の場合、ここで提示される質問の1つは、値が数値かどうかをテストすることです。 jasmine docsから:

expect(12).toEqual(jasmine.any(Number)); 
+0

OPには、「idが整数> 0であるかどうかを確認したい」という例が追加されています。この答えは、NaN、ゼロ、無限大、負数、および浮動小数点数のチェックに失敗します。時間内:これは、アップの数によって判断して、これまでに最も過大評価された回答である可能性があります。 –

1

私は物事のこの種を確認するためにunderscorejsを使用しました:

it('should be a number', function() { 
    expect(_.isNumber(this.task.get('id'))).toBeTruthy(); 
}); 
1

あなたが試すことができます。

it('should be integer', function() 
{ 
    var id = this.task.get("id"); 

    expect(id).toEqual(jasmine.any(Number)); 
    expect(id).toBeGreaterThan(0); 
    expect(Math.trunc(id)).toEqual(id); 
}); 

あなたがいない番号をお持ちの場合それを切り捨てると、異なる番号につながるので、適切なテストの失敗が発生します。

ES6をサポートしていない場合は、代わりにfloorを使用できます。

関連する問題