Tôi có một ứng dụng AngularJS được thiết lập với các bài kiểm tra bằng Karma + Jasmine. Tôi có một chức năng tôi muốn thử nghiệm lấy một đối tượng JSON lớn, chuyển đổi nó sang định dạng dễ tiêu thụ hơn bởi phần còn lại của ứng dụng và trả về đối tượng đã chuyển đổi đó. Đó là nó.
Đối với các thử nghiệm của tôi, tôi muốn bạn có các tệp JSON riêng biệt (* .json) chỉ với nội dung JSON giả - không có tập lệnh. Đối với thử nghiệm, tôi muốn có thể tải tệp JSON vào và bơm đối tượng vào chức năng tôi đang thử nghiệm.
Tôi biết mình có thể nhúng JSON vào trong một nhà máy giả như được mô tả ở đây: http://dailyjs.com/2013/05/16/angularjs-5/ nhưng tôi thực sự muốn JSON không được chứa trong tập lệnh - chỉ cần JSON thẳng các tập tin.
Tôi đã thử một vài thứ nhưng tôi khá là không quen trong lĩnh vực này. Đầu tiên, tôi thiết lập Karma để bao gồm tệp JSON của mình chỉ để xem nó sẽ làm gì:
files = [
...
'mock-data/**/*.json'
...
]
Điều này dẫn đến:
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
Vì vậy, sau đó tôi đã thay đổi nó để chỉ phân phát các tệp và không "bao gồm" chúng:
files = [
...
{ pattern: 'mock-data/**/*.json', included: false }
...
]
Bây giờ chúng chỉ được phục vụ, tôi nghĩ tôi sẽ cố gắng tải vào tệp bằng cách sử dụng $ http từ trong thông số kỹ thuật của tôi:
$http('mock-data/two-metrics-with-anomalies.json')
Khi tôi chạy thông số kỹ thuật, tôi nhận được:
Error: Unexpected request: GET mock-data/two-metrics-with-anomalies.json
Theo hiểu biết của tôi, điều đó có nghĩa là nó mong đợi một phản hồi chế giễu từ $ httpBackend. Vì vậy, ... tại thời điểm này, tôi không biết làm thế nào để tải tệp bằng các tiện ích Angular nên tôi nghĩ tôi sẽ thử jQuery để xem liệu ít nhất tôi có thể làm cho nó hoạt động hay không:
$.getJSON('mock-data/two-metrics-with-anomalies.json').done(function(data) {
console.log(data);
}).fail(function(response) {
console.log(response);
});
Kết quả này trong:
Chrome 27.0 (Mac) LOG: { readyState: 4,
responseText: 'NOT FOUND',
status: 404,
statusText: 'Not Found' }
Tôi kiểm tra yêu cầu này ở Charles và nó đang đưa ra yêu cầu
/mock-data/two-metrics-with-anomalies.json
Trong khi phần còn lại của các tệp mà tôi đã định cấu hình để được "đưa vào" bởi Karma đang được yêu cầu tại, ví dụ:
/base/src/app.js
Rõ ràng Karma đang thiết lập một số loại thư mục cơ sở để phục vụ các tệp từ đó. Vì vậy, đối với các cú hích, tôi đã thay đổi yêu cầu dữ liệu jquery của mình thành
$.getJSON('base/mock-data/two-metrics-with-anomalies.json')...
Và nó hoạt động! Nhưng bây giờ tôi cảm thấy bẩn và cần đi tắm. Giúp tôi cảm thấy sạch sẽ trở lại.