我有一个对象,我正在尝试使用Jasmine对其中一个方法进行单元测试。我得到的错误是undefined is not a function (evaluation foo.initArr())
。
foo.js
function Foo(value) {
if(typeof value !== "string") {
value = "";
}
var foo = {
value: value
};
return foo;
};
Foo.prototype.initArr = function(arr) {
if(arr) {
// do nothing
} else {
// initialize array
arr = [];
}
return arr;
};
foo.spec.js
describe("foo.js", function() {
var validVal,
numberVal,
nullVal,
falseVal,
trueVal,
undefinedVal;
beforeEach(function() {
validVal = "PrQiweu";
numberVal = 420;
nullVal = null;
falseVal = false;
trueVal = true;
undefinedVal = undefined;
});
afterEach(function() {
validVal = null;
numberVal = null;
falseVal = null;
trueVal = null;
undefinedVal = null;
});
describe("Foo:constructor", function() {
it("should return an empty string if the passed value isn't a string", function() {
var foo = new Foo(numberVal);
expect(foo.value).toEqual("");
});
it("should return a string if the passed value is a string", function() {
var foo = new Foo(validVal);
expect(foo.value).toEqual(jasmine.any(String));
});
describe("method:arr", function() {
it("should return an empty array if it wasn't passed one", function() {
var foo = new Foo(validVal);
expect(foo.initArr()).toBe([]);
});
})
});
});
最后一个测试用例失败了。我认为这里也不需要间谍,但我可能错了。我意识到initArr
函数毫无意义,所以请忽略我的白痴。
为什么最后一个测试用例失败了,我该如何解决呢?
答案 0 :(得分:3)
你的构造函数返回一个不同的 foo ,它没有原型函数。
function Foo(value) {
if(typeof value !== "string") {
value = "";
}
var foo = {
value: value
};
return foo; // This foo your locally defined foo var,
};
也许你打算写这个:
function Foo(value) {
if(typeof value !== "string") {
value = "";
}
this.value = value;
};