- 231
- 8
- CPU
- i5-6500
- Scheda Madre
- ASRock H170 Pro4S
- HDD
- Samsung 870QVO 1TB, Samsung 850EVO 250GB, HD Toshiba 2TB
- RAM
- Corsair DD4 2133 C13 2x4GB
- GPU
- Sapphire R9 380 4GB NITRO
- Audio
- Integrata + DAC Audioengine D1
- Monitor
- LG 24MB56HQ-B IPS
- PSU
- XFX 550 Black
- Case
- Corsair Spec-03
- Periferiche
- Casse Edifier R1800TIII
- OS
- Windows 10
Qui c'è il mio model.py:
Qui la mia views.py:
Qui la mia form.py:
E qui il mio test.py:
Perchè mi dice ValueError: Cannot assign "<Mock id=...>": "List.owner" must be a user instance?
Sembra non riconosca self.request.user = Mock() come un User. Invece usando self.request.user = Mock(spec=User) mi da l'errore AttributeError: Mock object has no attribute '_state' ma eppure i mock non possono essere chiamati con qualsiasi attributo, ovvero con gli attributi della classe che gli viene passata?
Qualcuno sa spiegarmi il problema o più semplciemente come fare il test? Grazie
Python:
class List(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True,
on_delete=models.PROTECT)
def get_absolute_url(self):
return reverse('view_list', args=[self.id])
@staticmethod
def create_new(first_item_text, owner=None):
list_ = List.objects.create(owner=owner)
Item.objects.create(text=first_item_text, list=list_)
class Item(models.Model):
text = models.TextField(default='')
list = models.ForeignKey(List, default=None, on_delete=models.PROTECT)
class Meta:
ordering = ('id',)
unique_together = ('list', 'text')
def __str__(self):
return self.text
Qui la mia views.py:
Python:
def new_list(request):
form = NewListForm(data=request.POST)
if form.is_valid():
list_ = List()
list_.owner = request.user
list_.save()
return redirect(str(list_))
return render(request, 'home.html', {'form': form})
Qui la mia form.py:
Python:
class NewListForm(ItemForm):
def save(self, owner):
if owner.is_authenticated:
List.create_new(first_item_text=self.cleaned_data['text'],
owner=owner)
else:
List.create_new(first_item_text=self.cleaned_data['text'])
E qui il mio test.py:
Python:
@patch('lists.views.NewListForm')
class NewListViewUnitTest(unittest.TestCase):
def setUp(self):
self.request = HttpRequest()
self.request.POST['text'] = 'new list item'
self.request.user = Mock()
#self.request.user = Mock(spec=User)
def test_passes_POST_data_to_NewListForm(self, mockNewListForm):
new_list(self.request)
mockNewListForm.assert_called_once_with(data=self.request.POST)
Perchè mi dice ValueError: Cannot assign "<Mock id=...>": "List.owner" must be a user instance?
Sembra non riconosca self.request.user = Mock() come un User. Invece usando self.request.user = Mock(spec=User) mi da l'errore AttributeError: Mock object has no attribute '_state' ma eppure i mock non possono essere chiamati con qualsiasi attributo, ovvero con gli attributi della classe che gli viene passata?
Qualcuno sa spiegarmi il problema o più semplciemente come fare il test? Grazie