我最近看到Anthony Fox的这篇文章,它展示了如何使用枚举来创建django CharFields中的选择集,我认为它非常整洁.
基本上,您创建了Enum的子类:
from enum import Enum
class ChoiceEnum(Enum):
@classmethod
def choices(cls):
return tuple((x.name, x.value) for x in cls)
Run Code Online (Sandbox Code Playgroud)
然后可以在您的模型中使用它,如下所示:
from .utils import ChoiceEnum
class Car(models.Model):
class Colors(ChoiceEnum):
RED = 'red'
WHITE = 'white'
BLUE = 'blue'
color = models.CharField(max_length=5, choices=Colors.choices(), default=Colors.RED.value)
red_cars = Car.objects.filter(color=Car.Colors.RED.value)
Run Code Online (Sandbox Code Playgroud)
但是,每当您尝试访问枚举值时,pylint都会发出警告(Colors.RED.value)
E1101:Instance of 'str' has no 'value' member
有没有办法避免/禁用ChoiceEnum的每个实例的此警告?
这个答案只适用于子类ChoiceEnum,而不是ChoiceEnum它本身.
我正在尝试为Vue的mounted()生命周期挂钩中的逻辑编写单元测试,但运气不佳。问题似乎mounted()是使用vue-test-utils挂载组件时从未调用过mount。这是我要测试的Vue组件:
<template>
<div></div>
</template>
<script>
export default {
name: 'MyComponent',
mounted () {
this.$store.dispatch('logout')
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
测试本身:
import { mount, createLocalVue } from '@vue/test-utils'
import Vuex from 'vuex'
import MyComponent from '@/components/MyComponent'
const localVue = createLocalVue()
localVue.use(Vuex)
describe('MyComponent.vue', () => {
let store
let actions
beforeEach(() => {
actions = {
logout: jest.fn().mockName('logout')
}
store = new Vuex.Store({
state: {},
actions
})
})
it('calls store "logout" action', () => {
mount(MyComponent, { localVue, …Run Code Online (Sandbox Code Playgroud)