2013-02-20 14 views
9

Tôi đang sử dụng LiveServerTestCase Django 1.4 để kiểm tra Selenium và đang gặp sự cố với phương thức lớp học setUpClass. Theo như tôi hiểu MembershipTests.setUpClass được chạy một lần trước khi thử nghiệm đơn vị được chạy.Django LiveServerTestCase: Người dùng được tạo trong phương thức setUpClass không có sẵn trong test_method?

Tôi đã đặt mã để thêm người dùng vào cơ sở dữ liệu trong MembershipTests.setUpClass nhưng khi tôi chạy thử nghiệm MembershipTests.test_signup không có người dùng nào được thêm vào cơ sở dữ liệu thử nghiệm. Tôi đang làm gì không chính xác? Tôi hy vọng người dùng tôi đã tạo trong setUpClass sẽ có sẵn trên tất cả các thử nghiệm đơn vị.

Nếu tôi đặt mã người dùng tạo ra trong MembershipTests.setUp và chạy MembershipTests.test_signup tôi có thể thấy người dùng, nhưng không muốn hoạt động này trước mỗi bài kiểm tra đơn vị như setUp là. Như bạn có thể thấy, tôi sử dụng lớp LiveServerTestCase tùy chỉnh để thêm chức năng cơ bản trong tất cả các thử nghiệm của tôi (test_utils.CustomLiveTestCase). Tôi nghi ngờ điều này có liên quan đến vấn đề của tôi.

Xin cảm ơn trước.

test_utils.py:

from selenium.webdriver.firefox.webdriver import WebDriver 
from django.test import LiveServerTestCase 

class CustomLiveTestCase(LiveServerTestCase): 

    @classmethod 
    def setUpClass(cls): 
     cls.wd = WebDriver() 
     super(CustomLiveTestCase, cls).setUpClass() 

    @classmethod 
    def tearDownClass(cls): 
     cls.wd.quit() 
     super(CustomLiveTestCase, cls).tearDownClass() 

tests.py:

from django.contrib.auth.models import User 
from django.test.utils import override_settings 
from test_utils import CustomLiveTestCase 
from test_constants import * 

@override_settings(STRIPE_SECRET_KEY='xxx', STRIPE_PUBLISHABLE_KEY='xxx') 
class MembershipTests(CustomLiveTestCase): 

    fixtures = [ 
     'account_extras/fixtures/test_socialapp_data.json', 
     'membership/fixtures/basic/plan.json', 
    ] 

    def setUp(self): 
     pass 

    @classmethod 
    def setUpClass(cls): 
     super(MembershipTests, cls).setUpClass() 
     user = User.objects.create_user(
      TEST_USER_USERNAME, 
      TEST_USER_EMAIL, 
      TEST_USER_PASSWORD 
     ) 

    def test_signup(self): 
     print "users: ", User.objects.all() 

Trả lời

9

Vì bạn đang sử dụng LiveServerTestCase, nó gần như giống như TransactionTestCase tạo và phá hủy cơ sở dữ liệu (cắt bớt bảng) cho mỗi testcase chạy.

Vì vậy, bạn thực sự không thể làm dữ liệu chung với LiveServerTestCase.

+0

Bất kỳ ý tưởng nào, làm cách nào để tạo người dùng và sau đó đăng nhập vào bằng LiveServerTestCase? Tạo tài khoản trong thiết lập với cơ sở dữ liệu SQLite trong: bộ nhớ: không hoạt động, ngay cả khi tôi cam kết thủ công. – dotz

12

Cơ sở dữ liệu bị rách nát xuống và nạp lại trên tất cả các phương pháp thử nghiệm, không phải trên lớp thử nghiệm. Vì vậy, người dùng của bạn sẽ bị mất mỗi lần. Làm điều đó trong setUp không phải setUpClass.

+0

Cảm ơn câu trả lời của bạn. Điều đó có nghĩa rằng [câu trả lời này] (http://stackoverflow.com/a/14038336/378638) là không chính xác hoặc tôi hiểu nhầm nó? Là nó chỉ không thể tạo ra các hồ sơ thử nghiệm ở một nơi để sử dụng trên tất cả các phương pháp thử nghiệm trong một lớp học thử nghiệm? Tôi muốn sử dụng cùng một hồ sơ người dùng trên tất cả các phương pháp thử và '' setUp'' sẽ kết thúc việc tạo lại nó trước mỗi phương thức. –