Redisに若干新しく、ここではNodeで初心者です。RedisをNode.js(TypeScript)に統合しようとするとアサーションエラーが発生する
node-redis
モジュールを、私が作業しているtypescriptノードプロジェクト(mocha
とchai
)で統合しようとしました。
私は基本的なゲッター/セッター関数を書こうとしています。残りのプロジェクトと統合することができます(私はレディスを使ってFacebookメッセンジャーボットの状態を追跡しています)。
私はsetKeyValue
機能を備えたDBへの新しいキーと値のペアを記述しようとするときはいつでも、トランザクションが(redis-cli
クライアントによって検証される)を通過するが、値がsetKeyValue
とgetValueFromKey
の両方について返さ対応していません。 DBトランザクションが成功した場合にはどうすればよいでしょうか。私が書いた
コードの実装は、以下の(私のredis_interaction.ts
ファイル内)である:私は実際に実行したときに、しかし
import {expect, assert} from 'chai';
import 'mocha';
import * as RedisInteraction from '../redis_interaction';
import {RedisResponse} from '../redis_types';
describe("Redis IO Works as expected", function() {
describe("Can GET/SET", function() {
it('Should be able to SET {Key, Value} Pair', function() {
var result = RedisInteraction.setKeyValue("key","value");
expect(result).to.equal(RedisResponse.OK);
});
it('Should be able to GET Value from Key', function() {
const response = RedisInteraction.getValueFromKey("key");
expect(response).to.equal("value");
});
});
describe("Can DEL", function() {
before(function() {
RedisInteraction.setKeyValue("key_to_delete","value");
});
it("Should be able to DEL Key from Redis DB", function() {
expect(RedisInteraction.deleteKeyFromRedis("key_to_delete"))
.to.equal(RedisResponse.OK);
});
});
});
:
import * as redis from 'redis';
var client = redis.createClient("6379", "127.0.0.1");
enum RedisResponse {
OK,
Fail
}
// 'Setter' Function for Key Value Pairs within Redis Database
export function setKeyValue(key : string, value : string): RedisResponse {
client.set(key, value, function(err, reply) {
if(!err) {
return RedisResponse.OK;
}
});
return RedisResponse.Fail;
}
// 'Getter' Function for Key Value Pairs within Redis Database
export function getValueFromKey(key : string) : [string, RedisResponse] {
client.get(key, function(err, reply) {
if(!err) {
return[reply, RedisResponse.OK];
}
});
return["", RedisResponse.Fail];
}
// 'Delete' Function for Removing Keys from within Redis Database
export function deleteKeyFromRedis(key : string) : RedisResponse {
client.del(key, function(err, reply) {
if(!err) {
if(reply) {
return RedisResponse.OK;
}
}
});
return RedisResponse.Fail;
}
私は、次のmocha
のテストでこのコードをテストしますnpm test
、次のエラーが表示されます。
> mocha lib/test/
Redis IO Works as expected
Can GET/SET
1) Should be able to SET {Key, Value} Pair
2) Should be able to GET Value from Key
Can DEL
3) Should be able to DEL Key from Redis DB
0 passing (13ms)
3 failing
1) Redis IO Works as expected Can GET/SET Should be able to SET {Key, Value} Pair:
AssertionError: expected 1 to equal 0
+ expected - actual
-1
+0
at Context.<anonymous> (lib/test/redis_test.js:11:38)
2) Redis IO Works as expected Can GET/SET Should be able to GET Value from Key:
AssertionError: expected [ '', 1 ] to equal 'value'
at Context.<anonymous> (lib/test/redis_test.js:15:40)
3) Redis IO Works as expected Can DEL Should be able to DEL Key from Redis DB:
AssertionError: expected 1 to equal 0
+ expected - actual
-1
+0
at Context.<anonymous> (lib/test/redis_test.js:24:21)
コールバックに関して何か間違っていますか?私の人生にとって、私が書いたコールバックが正しく働いていない理由を理解できません。
多くのおかげで、潜在的な冗長さについてお詫び申し上げます。