我正在处理文本: Nicholas Zakas的Web开发人员专业JavaScript 我正在用Jasmine.js测试这些例子。
我当前可以通过指定返回值来测试函数的输出,但是当我想要返回多个数据时,我遇到了麻烦。
教科书使用alert()方法,但这很麻烦,我不知道如何测试警报。我想知道是否有办法测试console.log()输出。例如:
function_to_test = function(){
var person = new Object();
person.name = "Nicholas";
person.age = 29;
return(person.name); //Nicholas
return(person.age); //29
});
我知道我可以将它们作为一个字符串返回,但是对于更复杂的示例,我希望能够测试以下内容:
function_to_test = function(){
var person = new Object();
person.name = "Nicholas";
person.age = 29;
console.log(person.name); //Nicholas
console.log(person.age); //29
});
Jasmine测试看起来像:
it("should test for the function_to_test's console output", function(){
expect(function_to_test()).toEqual("console_output_Im_testing_for");
});
有一种简单的方法可以解决这个问题吗?我对编码很陌生,所以任何指导都会受到赞赏。
答案 0 :(得分:20)
上面的代码有几个问题。正如所指出的那样,拥有多个return语句将不起作用。此外,在定义新对象时,最好使用对象文字语法而不是new Object
。
你通常会做的更像是这样的事情:
var function_to_test = function () {
var person = {
name : "Nicholas",
age : 29
};
return person;
};
使用上面的功能,有几种方法可以测试它。一个是使用Jasmine Spies来模拟console.log对象。
it("should test for the function_to_test's console output", function () {
console.log = jasmine.createSpy("log");
var person = function_to_test();
expect(console.log).toHaveBeenCalledWith(person);
});
另一种是测试函数的实际输出。
it("should return a person", function () {
var person = function_to_test();
expect(person).toEqual({ name : "Nicholas", age : 29 });
});
答案 1 :(得分:0)
我知道这是一个老问题(7 岁以上),但我今天刚刚通过 Google 搜索找到了这个答案。从这个答案中,我将其更改为以下内容并为我工作。
spyOn(console, 'error');
const dto = new DTO(); // add to console.error if no parameter is given
expect(console.error).toHaveBeenCalled();