TypeError:expect(...)。not.toBe不是函数

时间:2016-09-11 06:07:53

标签: javascript jasmine

进行练习,重新实现Jasmine测试框架中的一些功能。具体来说,我正在运行这一行:

expect(false).not.toBe(true)

我得到一个TypeError,说toBe不作为函数存在。但是,这一行:

expect(true).toBe(true)

通过。我怀疑这是我的not()函数返回此问题。

function ExpectedValue (val) {
    this.value = val;
    this.notted = false;

    this.not = function() {
        this.notted = !this.notted;
        return this;
    }

    this.toBe = function(b) {
        if (this.notted) {
            return this.value !== b;
        }
        else {
            return this.value === b;
        }
    }
}

function expect(a) {
    return new ExpectedValue(a);
}

console.log(expect(false).not.toBe(true));

1 个答案:

答案 0 :(得分:1)

Jasmine' not 不是一个函数。你的是。但是你正在使用它,好像它是Jasmine的(没有()):

console.log(expect(false).not.toBe(true));
// Note no () ---------------^

您的not需要是一个对象,其中包含您从expect返回的对象的所有方法,但其含义已反转,例如:



function ExpectedValue (val) {
    var self = this;
  
    self.value = val;

    this.not = {
        toBe: function(arg) {
            return !self.toBe(arg);
        }
    };

    this.toBe = function(b) {
        return self.value === b;
    };
}

function expect(a) {
    return new ExpectedValue(a);
}

console.log(expect(false).not.toBe(true));




那是它的手册,但那不可扩展。相反,您拥有一个包含所有方法的对象,并通过创建反转返回的函数来创建not

arrayOfMethodNames.forEach(function(name) {
    target.not[name] = function() {
        return !target[name].apply(target, arguments);
    };
});