의 코드를 사용 하시겠습니까? 현재 <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173967655173288.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="JavaScript Testing Tool Showdown: Sinon.js vs testdouble.js ">를 사용하려면 스탠드-인 -테스트를 위해 테스트하기 어려운 테스트를보다 쉽게 테스트 할 수 있도록 코드를 교체해야합니다.
setTimeout
이 기사에서는 Sinon.js와 TestDouble.js가 무엇을 제공하는지 탐구하고 각 장단점을 비교할 것입니다. Sinon.js는 여전히 더 나은 선택입니까, 아니면 도전자가 이길 수 있습니까?
키 포인트
- 기술적으로 말하면 Sinon.js에는 시뮬레이션이 없습니다. 그러나 Sinon의 시뮬레이션은 본질적으로 스터브 및 검증을 포함하는 객체이므로 를 사용하여 유사한 효과를 달성 할 수 있습니다.
는 td.replace(someObject)
를 사용하여 매개 변수 캡처와 유사한 효과를 얻을 수 있습니다 (와 혼동되지 않음). -
요약 및 결론 stub.yield
sinon.js 및 testdouble.js 모두 상당히 유사한 기능 세트를 제공합니다. 이와 관련하여, 분명히 우수하지는 않습니다. stub.yields
둘 사이의 가장 큰 차이점은 API입니다. Sinon.js는 아마도 조금 더 길며 일을하는 방법에 대한 많은 옵션을 제공합니다. 이것은 장단점 일 수 있습니다. TestDouble.js에는 LEANER API가있어 배우고 사용하기 쉽지만 임의의 디자인으로 인해 일부는 문제가 될 수 있습니다.
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();대조적으로, testDouble.js는 더 간단한 API를 선택합니다. 스파이 나 스터브와 같은 개념을 사용하는 대신 JavaScript 개발자가 , 및 와 같이 더 익숙한 언어를 사용합니다. 이로 인해 TestDouble은 시작하기가 더 쉬워지고 특정 작업에 더 적합합니다. 그러나 반면에, 더 고급 용도는 단순히 불가능할 수 있습니다 (때로는 의도적이기도합니다).
td.function
td.object
td.replace
var x = sinon.stub();
및
var x = td.function();
stub.callCount
td.explain
// 我们也可以为测试替身命名 var x = td.function('hello'); x('foo', 'bar'); td.explain(x); console.log(x); /* 输出: { name: 'hello', callCount: 1, calls: [ { args: ['foo', 'bar'], context: undefined } ], description: 'This test double `hello` has 0 stubbings and 1 invocations.\n\nInvocations:\n - called with `("foo", "bar")`.', isTestDouble: true } */및
var x = td.function(); td.when(x('hello', 'world')).thenReturn(true); var y = td.function(); td.verify(y('foo', 'bar'));및
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();기본적으로 Sinon은 기능에 얼마나 많은 추가 매개 변수가 제공되는지 신경 쓰지 않습니다. 와 같은 함수를 제공하지만 문서의 기본값으로 권장되지 않습니다. 와 같은 함수에는 "정확한"변형이 없습니다.
반면에 sinon.assert.calledWithExactly
stub.withArgs
노트 ignoreExtraArgs: true : Sinon-as-Promised를 사용하여 Sinon 1.X에 유사한 편리한 기능을 포함시킬 수 있습니다. Sinon 2.0 및 최신 버전에는 // 以下是查看函数调用的参数的方法:
var abs = td.replace(Math, 'abs');
Math.abs(-10);
var explanation = td.explain(abs);
console.log(explanation.calls[0].args); // 输出:[ -10 ]
// 以下是控制函数执行方式的方法:
var createElement = td.replace(document, 'createElement');
td.when(createElement(td.matchers.anything())).thenReturn('not an html element');
var x = document.createElement('div');
console.log(x); // 输出:'not an html element'
// testdouble 使用一次调用重置所有测试替身,无需单独清理
td.reset();
및
var x = sinon.stub();를 사용하여 스텁을 첫 번째 함수 를 매개 변수로 사용합니다.
var x = td.function();
last 매개 변수라고 가정합니다. 전화를 연습 할 때 지정할 필요가 없습니다.
stub.resolves
Sinon을 사용하여 행동을 바꿀 수도 있습니다
이 경우 대신를 사용합니다. 우리는 그것을 작동시키기 위해 호출의 특정 인덱스를 제공해야합니다. 이는 특히 많은 매개 변수가있는 함수에서 약간 번거 롭을 수 있습니다. stub.yields
// 我们也可以为测试替身命名 var x = td.function('hello'); x('foo', 'bar'); td.explain(x); console.log(x); /* 输出: { name: 'hello', callCount: 1, calls: [ { args: ['foo', 'bar'], context: undefined } ], description: 'This test double `hello` has 0 stubbings and 1 invocations.\n\nInvocations:\n - called with `("foo", "bar")`.', isTestDouble: true } */Sinon의 경우, 이것은 단순히 불가능합니다. 여러 통화를 에 연결할 수 있지만 그 중 하나만 호출합니다.
var x = sinon.stub(); x.withArgs('hello', 'world').returns(true); var y = sinon.stub(); sinon.assert.calledWith(y, 'foo', 'bar');를 사용할 수 있습니다.
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();<.> Sinon.js는 객체의 멤버 기능을 대체 할 수 있지만 이와 같은 모듈을 대체 할 수는 없습니다. Sinon을 사용할 때이를 위해서는 Proxyquire 또는 Rewire와 같은 다른 모듈을 사용해야합니다.
// 以下是查看函数调用的参数的方法: var abs = td.replace(Math, 'abs'); Math.abs(-10); var explanation = td.explain(abs); console.log(explanation.calls[0].args); // 输出:[ -10 ] // 以下是控制函数执行方式的方法: var createElement = td.replace(document, 'createElement'); td.when(createElement(td.matchers.anything())).thenReturn('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' // testdouble 使用一次调用重置所有测试替身,无需单独清理 td.reset();
간단한 솔루션은 사용중인 Ajax 기능을 대체하는 것입니다
또는 :
$.post
또는 :
var x = td.function();와 의 차이점을 자세히 설명하는 데 어려움을 겪을 수 있습니다!
Sinon.js를 사용하기가 어렵거나 "JavaScript 스타일"TestDouble.js를 찾고있는 경우에도 귀하를위한 것일 수 있습니다. Sinon을 사용하는 법을 배우는 데 많은 시간을 소비하는 저와 같은 사람들조차도 TestDouble.js를 시도하고 당신이 좋아하는지 확인하는 경향이 있습니다.
이 기사는 James Wright, Joan Yin, Christian Johansen 및 Justin Searls가 검토했습니다. itepoint 컨텐츠를 최대한 활용 한 모든 Sitepoint Peer Reviewers에게 감사합니다!
sinon.js 및 testdouble.js를 설치하는 방법은 무엇입니까?
및
를 사용하여 각각 테스트 파일에 소개 할 수 있습니다.
sinon.js 및 testdouble.js를 동시에 사용할 수 있습니까?
예, Sinon.js 및 TestDouble.js는 동일한 프로젝트에서 동시에 사용할 수 있습니다. 그들은 모두 매우 단순하게 단순하고 다른 라이브러리와 잘 작동하도록 설계되었습니다. 그러나 기능이 겹치는 기능이 있으므로 동시에 기능을 사용하면 혼란을 초래할 수 있습니다. 일반적으로 특정 요구 사항과 선호도에 따라 그 중 하나를 선택하는 것이 좋습니다.
Sinon.js에서는 를 사용하여 스터브를 만들 수 있습니다. 이 함수는 스파이처럼 작동하는 스터브 객체를 반환하지만 반환 값을 지정하거나 예외를 던지는 등 동작을 정의 할 수 있습니다. testdouble.js에서 를 사용하여 스터브를 만들 수 있습니다. 이 기능을 사용하면 특정 매개 변수로 테스트 대기를 호출 할 때 동작을 정의 할 수 있습니다.
Sinon.js 및 TestDouble.js를 사용하여 스파이 나 스터브를 확인하는 방법은 무엇입니까?
Sinon.js에서는 , 및 와 같은 메소드를 사용하여 스파이 또는 스터브를 확인할 수 있습니다. TestDouble.js에서는 를 사용하여 테스트 대기가 어떤 식 으로든 호출되는지 여부를 주장 할 수 있습니다.
sinon.js는 testdouble.js와 비교하여보다 포괄적 인 기능 세트를 가지고 있습니다. 여기에는 타이머를 모방하는 유틸리티와 XHR이 포함되어 있으며 특정 유형의 코드를 테스트하는 데 매우 유용합니다. 또한 더 광범위하게 사용되며 더 큰 커뮤니티가 있으므로 더 많은 자원과 지원을 얻을 수 있습니다.
예, Sinon.js 및 TestDouble.js는 모두 매우 깔끔하게 설계되었으며 다른 테스트 프레임 워크와 잘 작동합니다. JavaScript 지원 테스트 프레임 워크와 함께 사용할 수 있습니다.
예, Sinon.js 및 TestDouble.js는 공식 웹 사이트에 많은 문서가 있습니다. 이러한 라이브러리의 심층적 인 콘텐츠를 다루는 튜토리얼, 블로그 게시물 및 온라인 코스도 많이 있습니다.
위 내용은 JavaScript 테스트 도구 대결 : sinon.js vs testdouble.js의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Python과 JavaScript의 주요 차이점은 유형 시스템 및 응용 프로그램 시나리오입니다. 1. Python은 과학 컴퓨팅 및 데이터 분석에 적합한 동적 유형을 사용합니다. 2. JavaScript는 약한 유형을 채택하며 프론트 엔드 및 풀 스택 개발에 널리 사용됩니다. 두 사람은 비동기 프로그래밍 및 성능 최적화에서 고유 한 장점을 가지고 있으며 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.

Python 또는 JavaScript를 선택할지 여부는 프로젝트 유형에 따라 다릅니다. 1) 데이터 과학 및 자동화 작업을 위해 Python을 선택하십시오. 2) 프론트 엔드 및 풀 스택 개발을 위해 JavaScript를 선택하십시오. Python은 데이터 처리 및 자동화 분야에서 강력한 라이브러리에 선호되는 반면 JavaScript는 웹 상호 작용 및 전체 스택 개발의 장점에 없어서는 안될 필수입니다.

파이썬과 자바 스크립트는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구와 개인 선호도에 따라 다릅니다. 1. Python은 간결한 구문으로 데이터 과학 및 백엔드 개발에 적합하지만 실행 속도가 느립니다. 2. JavaScript는 프론트 엔드 개발의 모든 곳에 있으며 강력한 비동기 프로그래밍 기능을 가지고 있습니다. node.js는 풀 스택 개발에 적합하지만 구문은 복잡하고 오류가 발생할 수 있습니다.

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경