标签: redwoodjs

React 测试库:如何测试包含 useLocation() 的组件?

我正在使用RedwoodJS,它在后台使用 React 和 React 测试库。由于 useLocation() 挂钩,我正在努力测试一个组件(以及树中具有此组件的所有页面组件)。

\n

当在我的组件中使用useLocation()钩子时,我需要使用模拟浏览器位置历史记录的路由器来包装我的正在测试的组件以防止错误Error: Uncaught [TypeError: Cannot read property \'pathname\' of undefined]

\n

然而,当我这样做时,导航组件不再完全呈现,所以我无法测试它......有什么想法吗?

\n

导航.js

\n
//import statements\n\nconst renderListItems = (pathname) => {\n  const NavigationItems = [{..},{..},{..}] // example\n\n  return NavigationItems.map((item) => {\n    const selected = pathname.indexOf(item.path) ? false : true\n    return (\n      <ListItem\n        button\n        key={item.text}\n        onClick={() => {\n          navigate(item.route)\n        }}\n        selected={selected}\n      >\n        <ListItemText primary={item.text} />\n      </ListItem>\n    )\n  })\n}\n\nconst Navigation = () => {\n  const { pathname } …
Run Code Online (Sandbox Code Playgroud)

testing reactjs react-router react-testing-library redwoodjs

5
推荐指数
1
解决办法
1499
查看次数

Prisma 2 查询仅返回与所有提供的标签 ID 关联的记录

我有表格原则和标签。并且它们之间存在多对多关系(隐式连接)。

如果不使用prisma.raw,我如何运行以下查询?

SELECT p.id, p.title, p.description, p.createdAt, p.modifiedAt
    FROM principle p
   WHERE EXISTS (SELECT NULL
                   FROM _PrincipleToTag pt
                  WHERE pt.B IN (${tagIds.join(',')})
                    AND pt.A = p.id
               GROUP BY pt.A
                 HAVING COUNT(DISTINCT pt.B) = ${tagIds.length})
Run Code Online (Sandbox Code Playgroud)

如何更新此 Prisma 2 查询,以便返回的原则仅是与所有提供的 tagId 关联的原则?

export const principles = ({ tagIds }) => {
  const payload = {
    where: {
      //TODO filter based on tagIds
    },
  }
  return db.principle.findMany(payload)
}
Run Code Online (Sandbox Code Playgroud)

文档提到了containsandinevery,但我找不到我想要做的事情的例子。

我正在使用 RedwoodJs、Prisma 2、Apollo、GraphQL。 …

apollo-server react-apollo prisma prisma-graphql redwoodjs

4
推荐指数
1
解决办法
8045
查看次数

如何在 RedwoodJS 上创建字段解析器

RedwoodJS 自动将 GraphQL 查询解析器映射到api/src/services. 如何为给定的 GraphQL 类型创建字段解析器?

假设我有这个架构:

type Person {
  name: string!
  birthDate: DateTime!
  age: Int!
}
Run Code Online (Sandbox Code Playgroud)

但只有namebirthDate存储在数据库中。

使用graphql-tools我会这样编写我的解析器:

const resolvers = {
  Query: { ... },
  Mutation: { ... },
  Person: {
    age(person) {
      return new Date().getFullYear() - person.birthDate.getFullYear();
    },
  },
};
Run Code Online (Sandbox Code Playgroud)

PS:我知道年龄公式是错误的。

PS2:为了简单起见,我在这里使用年龄,想象一下计算或从数据库获取数据的成本很高。

redwoodjs

3
推荐指数
1
解决办法
690
查看次数