2009-05-07 29 views

Trả lời

35

Bạn chỉ cần tạo một cơ sở dữ liệu SQLite trong bộ nhớ và liên kết phiên của bạn với cơ sở dữ liệu đó.

Ví dụ:


from db import session # probably a contextbound sessionmaker 
from db import model 

from sqlalchemy import create_engine 

def setup(): 
    engine = create_engine('sqlite:///:memory:') 
    session.configure(bind=engine) 
    # You probably need to create some tables and 
    # load some test data, do so here. 

    # To create tables, you typically do: 
    model.metadata.create_all(engine) 

def teardown(): 
    session.remove() 


def test_something(): 
    instances = session.query(model.SomeObj).all() 
    eq_(0, len(instances)) 
    session.add(model.SomeObj()) 
    session.flush() 
    # ... 
+1

Câu trả lời hay! Tôi nghĩ rằng bạn cần phải gọi 'create_all' trên đối tượng MetaData để thực sự tạo ra các bảng. Ngoài ra, nếu các kiểu dữ liệu cụ thể của nhà cung cấp db được sử dụng, thì một số DDL có thể không chạy. – van

+0

Điểm tốt. Tôi đã cập nhật ví dụ để hiển thị cuộc gọi đến create_all. – codeape

+5

Đây là một câu trả lời khủng khiếp nếu SQLLite không phải là cơ sở dữ liệu sản xuất của bạn. Không bao giờ thử nghiệm với một cơ sở dữ liệu khác với cơ sở dữ liệu bạn đang sử dụng trong sản xuất. Họ sẽ có rất nhiều sự khác biệt và bạn đang đặt mình vào một thảm họa. –

2

Kiểm tra các dự án fixture. Chúng tôi đã sử dụng mũi để kiểm tra điều đó và đó cũng là một cách để khai báo dữ liệu để kiểm tra ngược lại, sẽ có một số ví dụ mở rộng để bạn sử dụng ở đó!

Xem thêm fixture documentation.

Các vấn đề liên quan