发布在Redux ORM QuerySet上进行映射和过滤

时间:2017-01-06 21:44:42

标签: javascript node.js babeljs jestjs redux-orm

我正在为redux-orm here做教程我需要在我的测试中的QuerySet实例上调用map

回购中的原始测试是here

这就是我创建Todo

的方法
const todoTags = 'testing,nice,cool'
const user = session.User.first()
const userId = user.getId()

const action = {
  type: CREATE_TODO,
  payload: {
    text: todoText,
    tags: todoTags,
    user: userId
  }
}

const { Todo, Tag, User } = applyActionAndGetNextSession(schema, state, action)

我的代码如下所示:

const newTodo = Todo.last()
console.log(newTodo.tags.forEach, newTodo.tags.map)
console.log('Print all tags')
newTodo.tags.forEach(tag => {
  console.log('Prints a tag')
  console.log(tag)
})

newTodo.tags.map(tag => {
  console.log('Prints a tag 2')
  console.log(tag)
  return tag
})

expect(newTodo.text).toEqual(todoText)
expect(newTodo.user.getId()).toEqual(userId)
expect(newTodo.done).toBeFalsy()
const newTodoTags = newTodo.tags.map(tag => tag.name)
console.log(newTodoTags)
expect(newTodoTags).toEqual(['testing','nice','cool'])

Tag模型如下:

Tag.backend = {
  idAttribute: 'name'
}

我可以使用

检索此模型恰好为ids的名称
newTodo.tags.idArr

这是黑客和不可接受的。

测试失败,这是我的

控制台输出
console.log(newTodo.tags)

 //OUTPUT
 QuerySet {
   ...
   idArr: ['testing', 'nice', 'cool']
   ...
 }

console.log(newTodo.tags.forEach, newTodo.tags.map)

//OUTPUT
[ Function forEach] [Function map]

console.log(newTodo.tags.toRefArray())

//OUTPUT
[undefined, undefined, undefined]

console.log('Print all tags')
newTodo.tags.forEach(tag => {
  console.log('Prints a tag')
  console.log(tag)
})

newTodo.tags.map(tag => {
  console.log('Prints a tag 2')
  console.log(tag)
  return tag
})

//OUTPUT
Prints all tags

console.log(newTodo.tags.withModels)

//Output is a QuerySet

newTodo.tags.withModels.map(tag => {
  console.log('mapping over tag models')
  console.log(tag)
  return tag
}

回应@markerikson评论:

case CREATE_TODO:
    const tags = payload.tags.split(',')
    const trimmed = tags.map(tag => tag.trim())
    trimmed.forEach(tag => Tag.create(tag))
    break
Tag模型中的

处理reducer中的字符串。 TodoTag的代码均为here

1 个答案:

答案 0 :(得分:1)

正如我在评论中建议的那样:您没有正确创建Tag实例。您似乎已将每个标记字符串直接传递到Tag.create(),因此它就像Tag.create("testing")一样。相反,您需要传递对象,例如Tag.create({name : "testing"})