我正在使用Jasmine为一个javascript应用程序进行TDD。出于某种原因,我无法引用我在SpecRunner.html文件的源部分中声明的函数,如果它嵌套在两个describe函数中。
以下是代码:
describe("DidiButton", function(){
var didiButtonDiv = document.createElement("div");
didiButtonDiv.id = "DidiButtonDiv";
it("should throw an UndefinedElementError if it isn't given a DOM", function(){
try{
var didiButton = createDidiButton();
}
catch(e){
expect(e.name).toEqual("UndefinedElementError");
}
});
it("should be able to associate itself with a DOM", function(){
var didiButton = createDidiButton(didiButtonDiv);
expect(didiButtonDiv).toEqual(didiButton.element);
});
describe("Link Functions", function(){
var didiButton = createDidiButton(didiButtonDiv);
var link = "http://www.google.com";
it("should be able to set a link", function(){
didiButton.setLink(link);
});
it("should be able to get the link set to it", function(){
expect(link).toEqual(didiButton.getLink());
});
});
});
这是我得到的错误:
ReferenceError: createDidiButton is not defined in file:///Users/.../spec/DidiButtonSpec.js (line 20)
如果我删除 describe("Link Functions", function(){...});
块,则测试通过。我用嵌套函数做了一个简单的测试,看看我是不是疯了;我在下面编写了脚本,并调用了 funcHi()
。它像我认为的那样工作,每个警报都能找到 message()
。
function message(){
return "Hi";
}
function funcHi(){
alert(message());
function func1(){
alert(message() + 1);
function func2(){
alert(message() + 2);
function func3(){
alert(message() + 3);
}
func3();
}
func2();
}
func1();
}
为什么茉莉花不能找到我的功能?
答案 0 :(得分:0)
我明白了:Jasmine不理解对SpecRunner.html文件的源脚本中包含的文件的引用,除非它们在规范或it(...)
函数中。如果我将其更改为以下内部描述块:
describe("Link Functions", function(){
var didiButton;
var link = "http://www.google.com";
it("should be able to set a link", function(){
didiButton = createDidiButton(didiButtonDiv);
didiButton.setLink(link);
});
it("should be able to get the link set to it", function(){
expect(link).toEqual(didiButton.getLink());
});
});