[REDIS] 자바 스크립트 스텁 레디 스가 상호 작용 Sinon를 사용하여
REDIS자바 스크립트 스텁 레디 스가 상호 작용 Sinon를 사용하여
나는 node.js.하고 있어요 node_redis 모듈을 통해 레디 스에 내 응용 프로그램의 상호 작용. 나는 내 응용 프로그램의 테스트를 자동화하는 모카와 sinon을 사용하고 있습니다. 내 응용 프로그램은 다음과 같은 :
...snip
var redisClient = redis.createClient(redisPort, redisHost);
var someValue = redisClient.get("someKey");
return someValue;
....
나는 redisClient.get에 전화를 () 스텁하고자합니다. 또한 redis.createClient ()에 대한 호출을 스텁하기 위해 필요한이 나는 작업을 수행하려면 - 내 생각은 ... 여기 내 테스트 코드입니다 :
...
var redis = require("redis");
var redisClient;
...
sinon.stub(redisClient, 'get').returns("someValue");
sinon.stub(redis, "createClient").returns(redisClient);
...
assert.equal(redis_client_underTest.call_to_redis(), "someValue");
...
시험은 AssertionError를 실패 : FALSE == "someValue와"
어떻게 redisClient을 스텁 또는 본도 가능합니까?
해결법
-
==============================
1.당신이 할 수있는 것은 Proxyquire 또는 재배 선 같이 사용 무언가이다. 나는 예를 들어 재배 선을 사용하여 수 있습니다.
당신이 할 수있는 것은 Proxyquire 또는 재배 선 같이 사용 무언가이다. 나는 예를 들어 재배 선을 사용하여 수 있습니다.
코드 스 니펫은 스텁 원하는 :
var redisClient = redis.createClient(redisPort, redisHost); var someValue = redisClient.get("someKey"); return someValue;
그런 다음 테스트에서 당신은 재배 선을 사용할 수 있습니다 :
var Rewire = require('rewire'); var myModule = Rewire("../your/module/to/test.js"); var redisMock = { get: sinon.spy(function(something){ return "someValue"; }); }; myModule.__set__('redisClient', redisMock);
당신이 당신의 redisClient을 가질 수 있습니다이 방법은 대체 함수가 호출 된 경우에는 스파이로 확인할 수 있습니다.
-
==============================
2.또한 node_redis 교체의 하락은 레디 스 - 모의 같은 것을 사용할 수있는 메모리에서 실행.
또한 node_redis 교체의 하락은 레디 스 - 모의 같은 것을 사용할 수있는 메모리에서 실행.
사용의 재배 선 (또는 농담 모듈 모의 객체 또는 무엇이든)는 실제 클라이언트 대신 테스트에서 모의 클라이언트를로드하고 메모리 버전에 대한 모든 테스트를 실행합니다.
-
==============================
3.다른 방법은 클래스의 정적 기능 getRedis에서 수행하고 조롱하는 것입니다. 예를 들면 :
다른 방법은 클래스의 정적 기능 getRedis에서 수행하고 조롱하는 것입니다. 예를 들면 :
let redis = { createClient: function() {}, }; let connection = { saddAsync: function() {}, spopAsync: function() {}, }; let saddStub = sinon.stub(connection, 'saddAsync'); sinon.stub(redis, 'createClient').returns(connection); sinon.stub(Redis, 'getRedis').returns(redis); expect(saddStub).to.be.calledOnce;
클래스 내부 연결 기능은 다음과 같습니다
this.connection = YourClass.getRedis().createClient(port, host, optional);
-
==============================
4.이것은 처음에 나에게 매우 사소한 듯하지만 난 proxyquire를 지원하지 않는 테스트를 위해 농담 사용되었다 특히 때문에주의를 많이 직면했다. 내 목표는 내가 그것을 달성하는 방법 그래서 여기, 레디 스의 요청 의존성을 조롱했다 :
이것은 처음에 나에게 매우 사소한 듯하지만 난 proxyquire를 지원하지 않는 테스트를 위해 농담 사용되었다 특히 때문에주의를 많이 직면했다. 내 목표는 내가 그것을 달성하는 방법 그래서 여기, 레디 스의 요청 의존성을 조롱했다 :
// The objective is to mock this dependency const redis = require('redis'); const redisClient = redis.createClient(); redis.set('key','value');
rewiremock와 의존성을 조롱 :
const rewiremock = require('rewiremock/node'); const app = rewiremock.proxy('./app', { redis: { createClient() { console.log('mocking createClient'); }, set() { console.log('mocking set'); } }, });
캐치는 당신이 의존성을 모의 rewiremock 같은 라이브러리를 필요, 농담과 재배 선, 또는 proxyquire를 사용할 수 있다는 것입니다.
REPL 예
from https://stackoverflow.com/questions/24937212/stubbing-redis-interactions-in-javascript-using-sinon by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 누군가가 레디 스 SETBIT 명령을 설명 할 수 있습니까? (0) | 2020.01.03 |
---|---|
[REDIS] StackExchange.Redis에서 비동기 명령과 Task.WhenAny 기다리고 있습니다 후 시간 제한 예외 (0) | 2020.01.03 |
[REDIS] 어떻게 ConnectionMultiplexer는 연결 해제를 처리합니까? (0) | 2020.01.03 |
[REDIS] 어떻게 C ++ 프로그램 내에서 레디 스를 사용 하는가? (0) | 2020.01.03 |
[REDIS] 레디 스의 데시벨 값에서 검색 (0) | 2020.01.02 |