카르마 단위 테스트 중 이미지에 대한 404 경고를 수정하는 방법
grunt / karma / phantomjs / jasmine을 사용하여 내 지시문 (angularjs) 중 하나를 단위 테스트하고 있습니다. 내 테스트가 잘 실행됩니다.
describe('bar foo', function () {
beforeEach(inject(function ($rootScope, $compile) {
elm = angular.element('<img bar-foo src="img1.png"/>');
scope = $rootScope.$new();
$compile(elm)();
scope.$digest();
}));
....
});
하지만 나는이 404를 얻습니다
WARN [web-server]: 404: /img1.png
WARN [web-server]: 404: /img2.png
...
아무것도하지 않는 출력에 노이즈를 추가합니다. 이 문제를 해결하는 방법이 있습니까? (당연히 karma의 logLevel을 변경하지 않고,보고 싶습니다.)
카르마를 구성하여로드 한 다음 요청시 제공해야하기 때문입니다.)
karma.conf.js 파일에는 이미 다음과 같은 파일 및 / 또는 패턴이 정의되어 있어야합니다.
// list of files / patterns to load in the browser
files : [
{pattern: 'app/lib/angular.js', watched: true, included: true, served: true},
{pattern: 'app/lib/angular-*.js', watched: true, included: true, served: true},
{pattern: 'app/lib/**/*.js', watched: true, included: true, served: true},
{pattern: 'app/js/**/*.js', watched: true, included: true, served: true},
// add the line below with the correct path pattern for your case
{pattern: 'path/to/**/*.png', watched: false, included: false, served: true},
// important: notice that "included" must be false to avoid errors
// otherwise Karma will include them as scripts
{pattern: 'test/lib/**/*.js', watched: true, included: true, served: true},
{pattern: 'test/unit/**/*.js', watched: true, included: true, served: true},
],
// list of files to exclude
exclude: [
],
// ...
자세한 정보 는 여기 에서 확인할 수 있습니다. :)
편집 : nodejs 웹 서버를 사용하여 앱을 실행하는 경우 karma.conf.js에 추가 할 수 있습니다.
proxies: {
'/path/to/img/': 'http://localhost:8000/path/to/img/'
},
EDIT2 : 다른 서버를 사용하지 않는 사용하려는 경우 로컬 프록시를 정의 할 수 있습니다 Karma는 사용중인 포트에 대한 액세스를 동적으로 제공하지 않습니다. karma가 9876 (통신이 아닌 다른 포트에서 시작하면 계속 그 짜증나는 404 를 얻으십시오 ...
proxies = {
'/images/': '/base/images/'
};
관련 이슈 : https://github.com/karma-runner/karma/issues/872
저에게 혼란스러운 퍼즐 조각은 '기본'가상 폴더였습니다. 그것이 당신의 조명기의 자산 경로에 존재하는 것입니다.
-으로 당 구성 문서
기본적으로 모든 자산은 http : // localhost : [PORT] / base /에서 제공됩니다.
참고 : 이것은 다른 버전에서는 사실이 아닐 수 있습니다. 저는 0.12.14에 있고 저에게는 효과가 있었지만 0.10 문서에서 언급하지 않았습니다.
파일 패턴을 여러 후 :
{ pattern: 'Test/images/*.gif', watched: false, included: false, served: true, nocache: false },
내 조명기에 사용할 수 있습니다.
<img src="base/Test/images/myimage.gif" />
그리고 나는 그 시점에서 프록시가 필요하지 않습니다.
@glepretre의 답변에 따라 빈 .png 파일을 만들고이를 구성에 추가하여 404 경고를 숨 깁니다.
proxies: {
'/img/generic.png': 'test/assets/img/generic.png'
}
karma.conf.js 내부에 일반적인 미들웨어를 만들 수 있습니다.
먼저 더미 1px 이미지를 정의합니다 (base64를 사용했습니다).
const DUMMIES = {
png: {
base64: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==',
type: 'image/png'
},
jpg: {
base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigD//2Q==',
type: 'image/jpeg'
},
gif: {
base64: 'data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=',
type: 'image/gif'
}
};
그런 다음 미들웨어 기능을 정의하십시오.
function surpassImage404sMiddleware(req, res, next) {
const imageExt = req.url.split('.').pop();
const dummy = DUMMIES[imageExt];
if (dummy) {
// Table of files to ignore
const imgPaths = ['/another-cat-image.png'];
const isFakeImage = imgPaths.indexOf(req.url) !== -1;
// URL to ignore
const isCMSImage = req.url.indexOf('/cms/images/') !== -1;
if (isFakeImage || isCMSImage) {
const img = Buffer.from(dummy.base64, 'base64');
res.writeHead(200, {
'Content-Type': dummy.type,
'Content-Length': img.length
});
return res.end(img);
}
}
next();
}
Karma conf에 미들웨어 적용
{
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
middleware: ['surpassImage404sMiddleware'],
plugins: [
...
{'middleware:surpassImage404sMiddleware': ['value', surpassImage404sMiddleware]}
],
...
}
구성 파일에 루트 경로가있는 경우 다음과 같이 사용할 수도 있습니다.
proxies: {
'/bower_components/': config.root + '/client/bower_components/'
}
수정하려는 karma.conf.js
프록시와 함께 파일을 가리켜 야합니다.
files: [
{ pattern: './src/img/fake.jpg', watched: false, included: false, served: true },
],
proxies: {
'/image.jpg': '/base/src/img/fake.jpg',
'/fake-avatar': '/base/src/img/fake.jpg',
'/folder/0x500.jpg': '/base/src/img/fake.jpg',
'/undefined': '/base/src/img/fake.jpg'
}
'ProgramingTip' 카테고리의 다른 글
프로그래밍 방식으로 뷰를 만들 때 자동 레이아웃 제약 조건을 어디에 설정해야합니까? (0) | 2020.10.14 |
---|---|
csv import pandas 중 행 건너 뛰기 (0) | 2020.10.14 |
MySQL의 UUID 성능? (0) | 2020.10.14 |
이메일에 이미지를 삽입하는 방법 (0) | 2020.10.14 |
SQL EXISTS 문은 어떻게 작동 작동합니까? (0) | 2020.10.14 |