unit-testing - Jasmine:每个 "it"一个匹配器还是多个?

标签 unit-testing jasmine matcher

在 Jasmine 测试中每个“它”有多个匹配器是否正确,否则它们会相互干扰?

我想将这些测试合并为一个:

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);
}));

这可能/合理吗?

最佳答案

您可以根据需要在每个测试中拥有尽可能多的断言。但是当这个测试失败时,有太多的东西很难阅读。因为您必须扫描数十行才能找出问题所在,而不仅仅是看到 '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);
}));

关于unit-testing - Jasmine:每个 "it"一个匹配器还是多个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423326/

相关文章:

java - Mockito ArgumentMatchers 不匹配吗?

c# - 访问最小起订量对象时如何返回空值?

javascript - 我应该如何检查 Jasmine 或javascript中的排序语句

c# - C#中单元测试的生命周期是什么

javascript - 是否可以在 karma 测试期间禁用 firefox 错误消息

javascript - 如何在元素上使用子选择器 > (或 + 等)和 by.css ?

Java + 如何将包含 '(' 的字符串替换为 '\\(' 以用于pattern.compile 正则表达式

java - 正则表达式将一个字符串分成三部分

c# - 设置 ShimFileCreationInformation 对象的属性

c# - 如何使用 `using` 语句对方法进行单元测试?