0

我正在尝试运行一个 redis lua 模拟项目来测试我的 redis lua 代码。但显然,redis-mock 项目中存在错误。

当我调用我的测试代码时,redis 模拟在hash.lua#22redis.call('hget', 'foo', 'bar')处抛出一个断言错误,这是从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

经过跟踪,我发现selfis 'foo'kis'bar'和 the k2is 实际上nil,我该如何修复这个错误,k应该是fook2应该是'bar'

4

2 回答 2

1

我认为你需要调用redis:call('hget', 'foo', 'bar')或等效redis.call(redis,'hget','foo','bar'),而不是redis.call('hget', 'foo', 'bar')

于 2013-03-13T07:27:28.867 回答
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
于 2013-03-13T09:12:05.043 回答