我使用的是django.contrib.postgres的CIText,如何在单元测试中继续使用SQlite? 在django试图用来运行我的测试的时刻: django.db.utils.ProgrammingError: type "citext" does not exist
LINE 1: ...gmodel" ALTER COLUMN "name" TYPE citext USING "name"::citext
在sqlite上用Django 1.7运行单元测试是不需要动脑筋的。只要几行配置行,您就可以开始工作了。使用Postgres,这几乎是不可能的。
我创建了测试数据库,将数据库和模式的所有者设置为用户测试,将数据库上的所有权限授予测试,我们应该可以继续进行了,对吗?但是不是的!
postgres=# create user testing with password '*****';
postgres=# create database project_test;
postgres=# grant all on database project_test to testing;
当我运行将数据插入数据库的Django测试时,它将插入到我的本地db.sqlite3,并在测试结束时保存。我不想这样,也不应该是
无论测试是通过还是失败,当所有测试都被执行时,测试数据库将被销毁。
我的单元测试:
from unittest import TestCase
from web.constants import USER_TYPE_CONTRACTOR
from web.models import User
class LoginTestCase(TestCase):
def setUp(self):
self.demo_user_1_use
我得到了与Django单元测试不一致的行为。在我使用sqlite的开发机器上,如果我分别在两个应用程序上运行测试--测试通过了,但是如果我运行manage.py test来同时测试所有的东西,那么我就开始在两个测试中获得一致的单元测试失败。
在我使用Postgres的暂存服务器上,我有一个在单独测试它(例如manage.py test MyApp.tests.MyTestCase.testSomething)时工作的特定测试,但是在运行整个测试用例(例如manage.py test MyApp.tests.TestCase)时失败。
其他相关的StackOverflow问题似乎有两个解决方案:
Pycharm在使用CIEmailField(null=True)时显示“意外参数”,而在使用CIEmailFieldOld(null=True)时则不显示“意外参数”。据我所知,null仍然是一个有效的论点,那么为什么Pycharm要给我这个警告呢?
from django.db.models import *
class CIText:
def db_type(self, connection):
return 'citext'
class CIEmailField(CIText, EmailField):
pass
class CIE
如何在Django单元测试中测试禁用并使用保存点的代码?
默认的Django unittest类封装在@atomic装饰器中的所有测试,这通常是您想要的,以确保sqlite数据库在测试之间被重置。但是,任何从测试中接触到transaction.set_autocommit()的代码都会引发错误:
TransactionManagementError: This is forbidden when an 'atomic' block is active.
即使它在单元组之外运行得很好。
如何在单元测试中暂时禁用事务自动提交,以便测试手动提交?
我正在为我的sqlite数据库类编写单元测试用例。在那个类中我有五个公共API。
我的测试用例如下所示:
+ (void)setUp { // Note, this is class method and hence called only once during start of this test suite.
// Code to delete the existing sqlite DB file.
}
- (void)testDBManagerSingletonInstance {
DBManager *dbMgr = [DBManager getSharedIn
我正在为django可重用的包/应用程序创建测试,而我的DB并不是动态创建的。
我在遵循以下步骤
这是很好的工作,直到有一些模型定义,当它失败
Creating test database for alias 'default'...
Traceback (most recent call last):
File "c:\github.com\django\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File &
正如预期的那样,在执行这样的等式测试时,比较成功:
CREATE TABLE citext_test (
value citext PRIMARY KEY
);
INSERT INTO citext_test VALUES ('one');
INSERT INTO citext_test VALUES ('two');
SELECT * FROM citext_test WHERE value = 'One';
但是,如果要比较的值是“text”类型,则比较失败:
SELECT * FROM citext_test WHERE val
在使用ReSharper5转换到Visual Studio2010之后,我的一些单元测试开始失败。更具体地说,这适用于使用带有SQLite的NHibernate的所有单元测试。这个问题似乎以某种方式与SQLite有关。不涉及NHibernate和SQLite的单元测试仍然运行良好。
例外情况如下:
NHibernate.HibernateException : Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate, Version=2.1.2.4000, Culture=neutral, Pu
当使用sqlite for django时,你可以从源代码管理中签出你的应用程序并运行单元测试,而不需要做任何特殊的事情。但是,当您突然切换到使用mysql作为数据库时,您需要创建一个数据库。为什么我需要这样做?这特别奇怪,因为单元测试甚至不会使用该数据库,而是通过在名称前加上“test_”来创建自己的数据库。
环境 Ubuntu 20.04和Debian 10,分别使用Python 3.8或3.7。 已尝试Postgresql版本11、12和14。 binary copg2-二进制2.8.6 概述 我正在尝试安装一个Django项目,我得到了这个错误: psycopg2.errors.UndefinedFile: could not open extension control file "/usr/share/pgsql/extension/citext.control": No such file or directory me devs告诉我这可能是postgresql-co
在django单元测试中遇到了一些相当奇怪的行为。我有一个继承自django.test.testcase的类,用于验证注册表单创建person对象和user对象,但随后我可以在测试完成后在Admin界面中查找和查找这些对象。这就是测试:
import unittest
import time
from django.test import TestCase
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import Us
就像瓷砖上写的那样,我正在尝试创建一个列作为citext的表。
我已经手动在数据库上创建了扩展。
我可以直接从PSQL创建一个成功的表:
CREATE TABLE test (nickname citext PRIMARY KEY, full_name TEXT NOT NULL);
上面的SQL可以工作。
但是,每当我尝试使用psycopg2连接执行相同的SQL时,它都会失败,因为:
type "citext" does not exist
LINE 1: CREATE TABLE test (nickname citext PRIMARY KEY, full_nam...
我在Django 3.2.8中的django.db.models.Value函数中使用QuerySet表达式。当传递字符串值(在下面的示例中是"|")时,对查询字符串的转换无法添加',这将导致查询失败。
from django.db import models
from django.db.models import F, Value
from django.db.models.functions import Concat
class PurchaseOrder(models.Model):
id = models.AutoField(primary_key