4

Jasmine テストで 1 つの「it」ごとに複数のマッチャーを使用するのは正しいですか、それとも互いに干渉しますか?

これらのテストを 1 つに統合したいと思います。

var mapper = ......... ;

it('should be reviewed if not admin and language not set', inject(function() {
    scope.globals.isAdmin = false;
    scope.globals.language = '';
    mapper.updatedOn.setYear(2013);
    expect(scope.isReviewed(mapper)).toBe(true);
}));

it('should disregard mapper date if not admin and language not set', inject(function() {
    scope.globals.isAdmin = false;
    scope.globals.language = '';
    mapper.updatedOn.setYear(2015);
    expect(scope.isReviewed(mapper)).toBe(true);
}));

it('should be reviewed if admin and mapper is older', inject(function() {
    scope.globals.isAdmin = true;
    scope.globals.language = '';
    mapper.updatedOn.setYear(2013);
    expect(scope.isReviewed(mapper)).toBe(true);
}));

it('should be not reviewed if admin and mapper is newer', inject(function() {
    scope.globals.isAdmin = true;
    scope.globals.language = '';
    mapper.updatedOn.setYear(2015);
    expect(scope.isReviewed(mapper)).toBe(false);
}));

it('should be reviewed if not admin, language is set and mapper is older', inject(function() {
    scope.globals.isAdmin = false;
    scope.globals.language = 'de';
    mapper.updatedOn.setYear(2013);
    expect(scope.isReviewed(mapper)).toBe(true);
}));

it('should be not reviewed if not admin, language is set and mapper is newer', inject(function() {
    scope.globals.isAdmin = false;
    scope.globals.language = 'de';
    mapper.updatedOn.setYear(2015);
    expect(scope.isReviewed(mapper)).toBe(false);
}));

これは可能/合理的ですか?

4

2 に答える 2

6

テストごとに好きなだけアサーションを持つことができます。しかし、多すぎると、このテストが失敗したときに読みにくくなります。'should be not reviewed if not admin, language is set and mapper is newer'失敗したことを確認するだけでなく、何が問題なのかを把握するために何十行もスキャンする必要があるからです。

ところで。あなたの場合、ヘルパー関数を書くことができるので、ボイラープレートがあまりありません。

var admin = true;
var notAdmin = false

init(isAdmin, language, year) {
    scope.globals.isAdmin = isAdmin;
    scope.globals.language = language;
    mapper.updatedOn.setYear(year);
}

it('should be not reviewed if not admin, language is set and mapper is newer', inject(function() {
    init(admin, 'de', 2015)
    expect(scope.isReviewed(mapper)).toBe(false);
}));
于 2013-05-09T06:04:20.793 に答える
3

私が言うには、それは「期待の量」についてではありません。しかし、それあたりの「行動量」の量。1 つの動作のテストで予想以上のものが必要な場合は、さらに使用してください。ただし、1 つのテスト ケースにまとめられない複数の側面をテストしないでください。

あなたが行ったように各 it ブロックで 1 つの動作をテストし、Andreas Köberles の提案を使用してヘルパー関数を使用します。

于 2013-05-13T13:12:38.357 に答える