Jasmine expect(resultCode).toBe(200或409)

时间:2014-01-06 01:00:43

标签: javascript unit-testing jasmine

对于某些测试场景,我遇到了针对多个值进行测试的需要,这些都是正常的。

我想做的事情如下:

expect(resultCode).toBeIn([200,409]);

resultCode200409时,此规范应该通过。这可能吗?

ADDED 感谢peter和dolarzo指导我创建匹配器。我有addMatchers()的问题。所以,最后我将以下内容添加到jasmine.js:

jasmine.Matchers.prototype.toBeIn = function (expected) {
    for (var i = 0; i < expected.length; i++)
        if (this.actual === expected[i])
            return true;
    return false;
};

这给了我一个有效的解决方案。我现在可以根据需要做toBeIn。 (Jasmine 1.3.1)

1 个答案:

答案 0 :(得分:6)

为了做这样的工作:

 expect(3).toBeIn([6,5,3,2]);

Jasmine有一个名为matchers的功能:

这是一个关于如何声明它们的示例。我已经在最后声明了你正在寻找的方法:

describe('Calculator', function(){
    var obj;
    beforeEach(function(){
        //initialize object
        obj = new Object();

        jasmine.addMatchers({
            toBeFive: function () {
                return {
                    compare: function (actual, expected) {
                        return {
                            pass: actual === 5,
                            message: actual + ' is not exactly 5'
                        }
                    }
                };
            },
            toBeBetween: function (lower,higher) {
                return {
                    compare: function (actual, lower,higher) {
                        return {
                            pass: ( actual>= lower   && actual <= higher),
                            message: actual + ' is not between ' + lower + ' and ' + higher
                        }
                    }
                };
            },
            toBeIn: function(expected) {
                    return {
                        compare: function (actual, expected) {
                            return {
                                pass: expected.some(function(item){ return item === actual; }),
                                message: actual + ' is not in ' + expected
                            }
                        }
                    };
                }
        });


    });

这是您需要的匹配器:

toBeIn: function(expected) {
                    return {
                        compare: function (actual, expected) {
                            return {
                                pass: expected.some(function(item){ return item === actual; }),
                                message: actual + ' is not in ' + expected
                            }
                        }
                    };
                }
使用jasmine 2.0

重要。我不得不使用 jasmine.addMatchers({与jasmine specrunner.html但是当我用Karma配置它时,我必须用这个替换 jasmine this.addMatchers({,因为Karma使用早期版本的Jasmine。