我正在尝试运行redis lua模拟项目来测试我的redis lua代码。但显然,redis-mock项目中存在错误。
当我在测试代码中调用redis.call('hget', 'foo', 'bar')
时,redis mock在hash.lua#22处抛出一个断言错误,该错误来自RedisLua.lua#20
-- RedisLua.lua
local call = function(self)
return (function(cmd, ...)
cmd = string.lower(cmd)
local arg = {...}
local ret = self.db[cmd](self.db, unpack(arg)) -- line 20
if self.RedisLua_VERBOSE then
print(cmd .. "( " .. table.concat(arg, " ") .. " ) === ".. tostring(ret))
end
return ret
end)
end
-- hash.lua
function RedisDb:hget(self,k,k2)
assert((type(k2) == "string")) -- # line 22
local x = RedisDb.xgetr(self,k,"hash")
return x[k2]
end
追踪后,我发现,self
为'foo'
,k
为'bar'
,k2
实际为nil
,如何我可以修复此错误,k
应为foo
,而k2
应为'bar'
答案 0 :(得分:1)
我认为您需要致电redis:call('hget', 'foo', 'bar')
或等效redis.call(redis,'hget','foo','bar')
,而不是redis.call('hget', 'foo', 'bar')
。
答案 1 :(得分:0)
回答我自己的问题。
定义为:
时,不需要self
。
-- hash.lua
function RedisDb:hget(self,k,k2)
assert((type(k2) == "string")) -- # line 22
local x = RedisDb.xgetr(self,k,"hash")
return x[k2]
end
更改为
-- hash.lua
function RedisDb:hget(k,k2)
assert((type(k2) == "string")) -- # line 22
local x = RedisDb:xgetr(k,"hash")
return x[k2]
end