처음으로 재스민을 사용하면서 계속 사물을 처리하려고합니다. 2.0.0 독립 실행 형 버전 사용. 내 SpecRunner.html에서 다음 줄을 가지고 :재스민이 내 (전역) 기능을 인식하지 못합니다.
$(function() {
function deleteLink(linkHref, callback) {
$.ajax({
type: "POST",
url: "/delete?href=" + linkHref,
success: callback
});
}
function redirectHome() {
location.assign("/");
}
$('.delete_button').on('click', function() {
var buttonUrl = $(this).parent().data('link-href');
if(confirm("Are you sure you want to remove this link?")) {
deleteLink(buttonUrl, redirectHome);
}
});
});
용서해주세요 : 나는 확실히 내가 함수의 다음 세트를 선언하는 내 admin.js 파일을 포함하고 그래서
//... jasmine js files included here ...
<!-- include source files here... -->
<script type="text/javascript" src="lib/jasmine-jquery.1.3.1.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="src/admin.js"></script>
//... the rest of my scripts, and then my specs ...
지저분한 코드. 나는 아직도 JS 기술을 배우고있다. 나랑 벗었 어. 내가 AJAX 콜백을 시험하기위한 suggested format와 (I가 그것을 기대대로 정확하게 브라우저에서 작동)이 기능을 테스트하기 위해 노력하고있어 :
Can't find variable: deleteLink in file:///path/to/my/app/jasmine/spec/adminSpec.js
:
describe("Admin library", function() {
describe(".delete_button event handling", function() {
beforeEach(function() {
loadFixtures("delete_button.html");
});
// other tests here...
it("should set the location to /", function() {
spyOn($, "ajax").and.callFake(function(e) {
e.success();
});
var callback = jasmine.createSpy();
deleteLink("http://some.link.href.com", callback);
expect(callback).toHaveBeenCalled();
});
});
});
그러나, 테스트가 항상이 오류와 함께 실패
현재이 파일에서 명시 적으로 선언되지 않은 다른 jasmine/spec 파일의 함수를 테스트하고 있습니다. SpecRunner.html 파일에 스크립트가 포함되어 있다고 생각했습니다. 맞습니까? 여기에 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?
멋지다. 나는 여전히 클로저의 교수형을 얻고있다. 그래서 나는이 오류에 완전히 속았다. 이러한 상황을 처리하는 "올바른 방법"이라면 올바른 방향으로 나를 도와 주시겠습니까? 아니면 자바 스크립트 개발자가 이러한 전역 기능을 사용하지 않도록하는 목표입니까? 이 함수를 할당 할 수있는 유용한 JS 객체를 인스턴스화 할 수 없다고 생각했기 때문에 가장 간단한 옵션을 보았습니다. –
@BradRice 메소드를 다른 곳에서 사용해야하는 경우 public으로 선언해야합니다. 당신이 피하고 싶은 것은 다른 파일들이 접근해서는 안되는 전역 변수 나 함수를 가지는 것입니다. 또한, 프로젝트가 커지면,'window.MyNamespace = {}'및'window.MyNamespace.MyFunction = ...'과 같은 객체의 함수를 "네임 스페이스"할 수 있습니다. – HoLyVieR
도움을 많이 주셔서 감사합니다. 나처럼 누군가가 메소드와 속성을 "공개"대 "개인"대 "특권"으로 만드는 것에 대한 정보를 더 원했던 사람은이 기사가 매우 도움이된다는 것을 알게되었습니다. http://phrogz.net/JS/classes /OOPinJS.html –