ฉันมีแอป AngularJS ที่ตั้งค่าด้วยการทดสอบโดยใช้ Karma + Jasmine ฉันมีฟังก์ชั่นที่ฉันต้องการทดสอบที่ใช้ออบเจ็กต์ JSON ขนาดใหญ่แปลงเป็นรูปแบบที่แอปที่เหลือสามารถใช้งานได้มากกว่าและส่งคืนอ็อบเจ็กต์ที่แปลงนั้น แค่นั้นแหละ.
สำหรับการทดสอบของฉันฉันต้องการให้คุณมีไฟล์ JSON แยกต่างหาก (* .json) ที่มีเนื้อหาจำลอง JSON เท่านั้น - ไม่มีสคริปต์ สำหรับการทดสอบฉันต้องการจะโหลดไฟล์ JSON และปั๊มวัตถุลงในฟังก์ชันที่ฉันกำลังทดสอบได้
ฉันรู้ว่าฉันสามารถฝัง JSON ภายในโรงงานจำลองได้ตามที่อธิบายไว้ที่นี่: http://dailyjs.com/2013/05/16/angularjs-5/แต่ฉันต้องการให้ JSON ไม่อยู่ในสคริปต์ - เพียงแค่ JSON แบบตรง ไฟล์.
ฉันลองทำมาสองสามอย่างแล้ว แต่ฉันค่อนข้างไม่มีใครในด้านนี้ ก่อนอื่นฉันตั้งค่า Karma เพื่อรวมไฟล์ JSON ของฉันเพื่อดูว่ามันจะทำอะไร:
files = [
...
'mock-data/**/*.json'
...
]
สิ่งนี้ส่งผลให้:
Chrome 27.0 (Mac) ERROR
Uncaught SyntaxError: Unexpected token :
at /Users/aaron/p4workspace4/depot/sitecatalyst/branches/anomaly_detection/client/anomaly-detection/mock-data/two-metrics-with-anomalies.json:2
ดังนั้นฉันจึงเปลี่ยนเป็นเพียงแค่ให้บริการไฟล์ไม่ใช่ "รวม":
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
ตอนนี้มีให้บริการเท่านั้นฉันคิดว่าฉันจะพยายามโหลดไฟล์โดยใช้ $ http จากภายในข้อมูลจำเพาะของฉัน:
$http('mock-data/two-metrics-with-anomalies.json')
เมื่อฉันรันข้อมูลจำเพาะที่ฉันได้รับ:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
ซึ่งในความเข้าใจของฉันหมายความว่าคาดว่าจะได้รับคำตอบที่เยาะเย้ยจาก $ httpBackend ณ จุดนี้ฉันไม่รู้วิธีโหลดไฟล์โดยใช้โปรแกรมอรรถประโยชน์ Angular ดังนั้นฉันจึงคิดว่าจะลองใช้ jQuery เพื่อดูว่าอย่างน้อยฉันก็สามารถใช้งานได้:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
ผลลัพธ์นี้ใน:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
ฉันตรวจสอบคำขอนี้ใน Charles และกำลังส่งคำขอไปที่
/mock-data/two-metrics-with-anomalies.json
ในขณะที่ไฟล์อื่น ๆ ที่ฉันกำหนดค่าให้ "รวม" โดย Karma กำลังถูกร้องขอที่ตัวอย่างเช่น:
/base/src/app.js
เห็นได้ชัดว่า Karma ตั้งค่าไดเร็กทอรีฐานบางประเภทเพื่อให้บริการไฟล์จาก. ดังนั้นสำหรับการเตะฉันเปลี่ยนคำขอข้อมูล jquery เป็น
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
และได้ผล! แต่ตอนนี้ฉันรู้สึกสกปรกและต้องอาบน้ำ ช่วยให้ฉันรู้สึกสะอาดอีกครั้ง