2015-09-16 3 views
4

Как вызвать call setup_env(), когда нос создает экземпляр собственного теста?Как высмеять пользователей с помощью GAE и Nosetest?

Я пытаюсь разработать приложение App Engine с TDD, и мне нужно выяснить, как насмехаться над пользователями.

я начинаю мои тесты с:
nosetests -v --with-GAE

У меня было несколько человек предлагают использовать nosetests, потому что он будет делать вещи проще. Однако все эти примеры для того, как издеваться вещи, кажется, явно использовать testbed.setup_env()
https://cloud.google.com/appengine/docs/python/tools/localunittesting
How do you mock the User service in App Engine?

Я не понимаю, как я могу установить экологические значения с помощью nosetests.

Это то, что я сейчас:

import sys, os, subprocess, time, unittest, shlex  
sys.path.append("/usr/local/google_appengine") 
sys.path.append('/usr/local/google_appengine/lib/')  
sys.path.append("/usr/local/google_appengine/lib/yaml/lib")  
sys.path.append("/usr/local/google_appengine/lib/webapp2-2.5.2")  
sys.path.append("/usr/local/google_appengine/lib/django-1.5")  
sys.path.append("/usr/local/google_appengine/lib/cherrypy")  
sys.path.append("/usr/local/google_appengine/lib/concurrent")  
sys.path.append("/usr/local/google_appengine/lib/docker")  
sys.path.append("/usr/local/google_appengine/lib/requests")  
sys.path.append("/usr/local/google_appengine/lib/websocket")  
sys.path.append("/usr/local/google_appengine/lib/fancy_urllib")  
sys.path.append("/usr/local/google_appengine/lib/antlr3")  

os.environ['APPLICATION_ID'] = 'workout' 

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys 

from google.appengine.api import memcache, apiproxy_stub, apiproxy_stub_map  
from google.appengine.ext import db  
from google.appengine.ext import testbed  
from google.appengine.datastore import datastore_stub_util  
from google.appengine.tools.devappserver2 import devappserver2  

class NewVisitorTest(unittest.TestCase):  
    # enable the datastore stub 
    nosegae_datastore_v3 = True 
    nosegae_datastore_v3_kwargs = { 
     'datastore_file': '/tmp/nosegae.sqlite3', 
     'use_sqlite': True 
    } 

    def setUp(self):  
     # Start the dev server  
     cmd = "/usr/local/bin/dev_appserver.py /Users/Bryan/work/GoogleAppEngine/workout_log/app.yaml --port 8080 --storage_path /tmp/datastore --clear_datastore --skip_sdk_update_check"  
     self.dev_appserver = subprocess.Popen(shlex.split(cmd),  
               stdout=subprocess.PIPE)  
     time.sleep(2) # Important, let dev_appserver start up  

     self.datastore_stub = apiproxy_stub_map.apiproxy.GetStub('datastore_v3')  

     self.browser = webdriver.Firefox()  
     self.browser.implicitly_wait(3)  

    def tearDown(self):  
     self.browser.quit()   
     self.dev_appserver.terminate() 
+0

Вы получаете ошибку? –

+0

Если я устанавливаю с tb = testbed.Testbed() tb.activate() Это не работает, потому что носетисты настраивают Testbed на свой собственный. – BryanWheelock

+1

SO-сообщение, на которое вы ссылаетесь, сообщает вам, что вам нужно. Неважно, что вы используете нос. Нос - это просто тестовый бегун, поэтому он не изменяет, как вы издеваетесь над пользователями в GAE. –

ответ

3

Я думаю, что я понял это сам. я добавил заявление ниже в Тестовом():

testself.testbed.setup_env(user_is_admin='1') 
1

FWIW, вы можете настроить пользователь окурка так же, как настроить датастор окурок.

Вот example from the repo

Вот supported configuration keys

class NewVisitorTest(unittest.TestCase): 
    # enable the users stub 
    nosegae_user = True 
    nosegae_user_kwargs = { 
     'USER_EMAIL': '[email protected]', 
     'USER_IS_ADMIN': 1 # User should be considered an admin 
    } 
    # enable the datastore stub 
    nosegae_datastore_v3 = True 
    nosegae_datastore_v3_kwargs = { 
     'datastore_file': '/tmp/nosegae.sqlite3', 
     'use_sqlite': True 
    }