简化,我有两个文件,一个包和一个目标.包中包含目标的DBref()列表,目标包含包的DBRef.简化它的设置如下:
class Target(Document):
package = ReferenceField('Package')
name = StringField()
class Package(Document):
targets = ListField(ReferenceField('Target'))
name = StringField()
Run Code Online (Sandbox Code Playgroud)
当我创建一组目标时,使用mongoengine的标准方法按预期工作:
# in a method on Package, self = current Package instance
target = Target(name="My Name", package=self).save()
self.targets.insert(0, targets)
Run Code Online (Sandbox Code Playgroud)
我可以通过该包查询目标,并按预期返回结果:
>>> p = Package.objects.get(id='53e4db7bc57d207fc3d70738')
>>> Target.objects(name="My Name", package=p)
[<Target: My Name>]
Run Code Online (Sandbox Code Playgroud)
但对于某些目标,我们一次创建很多,而是使用批量执行来创建文档(简化):
bulk = Target._get_collection().initialize_unordered_bulk_op()
for line in csv_reader:
entry = dict(zip(header, line))
entry.update({'name': 'My Name', '_cls': 'Target', 'package': package.to_dbref()})
bulk.find({'name': 'My Name', 'package': package.to_dbref()}).upsert().update({'$set': entry})
bulk.execute()
Run Code Online (Sandbox Code Playgroud)
这些对象看起来完全正常,但是,即使读取它们的值似乎没有问题,引用它们的包的查询也不起作用.
(Pdb) self
<Package: Video Package …Run Code Online (Sandbox Code Playgroud) 在我的app.config我使用一个名为ui-router-extras FutureStates的服务来动态地从REST调用的结果创建状态.其中一个副作用是,当我的测试运行时,由于我在所有测试中加载我的主应用程序模块,所有测试都调用该服务,因此所有测试都失败了
Error: Unexpected request: GET /api/v1/config
No more request expected
Run Code Online (Sandbox Code Playgroud)
我可以将以下内容添加到我的测试套件中,它修复了问题,使用后端注册此调用以便它可以预期.
beforeEach(inject(function(_$httpBackend_){
_$httpBackend_.whenGET(/\/api\/v1\/config.*/).respond([]);
}));
Run Code Online (Sandbox Code Playgroud)
问题是这需要添加到每个测试套件中,在我的模块化应用程序中有很多湿代码.我正在寻找的是一种为所有测试全局定义此期望的方法(在业力全局文件中,或者我甚至可以选择服务/单行导入到我的套件中)或者如果我的测试设置或app.config低效设置是一种改进方法.
到目前为止我尝试过的
// Defined in a tests-global.js file listed in my karma files array
beforeEach(inject(function(_$httpBackend_){
_$httpBackend_.whenGET(/\/api\/v1\/req_params.*/).respond([]);
}));
Run Code Online (Sandbox Code Playgroud)
它失败,Error: Injector already created, can not register a module!因为在我的个人测试套件,我打电话beforeEach(module('x'));给使用该模块的模块,并且你不能这样做,以后的inject().
我也试过了
// Defined in a tests-global.js file listed in my karma files array
beforeEach(function() {
var $injector = angular.injector(['ngMock']);
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET(/\/api\/v1\/req_params.*/).respond([]);
});
Run Code Online (Sandbox Code Playgroud)
这不会产生额外的错误,但也无法解决 …
我正在开展我的第一个GAE项目,我在管理控制台中显示自定义页面时遇到了一些麻烦.我正在关注Google Docs,但它似乎并不适用于我.我觉得它可能与本说明有关:
注意:只有默认版本定义的自定义页面才会显示在管理控制台中.
但我不完全确定他们的意思(应用程序的默认版本?).
如果我直接访问页面URL,页面URL工作正常,但链接不会显示在管理控制台侧栏中.
YAML:
application: namegenerator
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /css
static_dir: css
- url: /admin/.*
script: main.app
login: admin
- url: /.*
script: main.app
libraries:
- name: jinja2
version: latest
builtins:
- remote_api: on
admin_console:
pages:
- name: Manual DB Entry
url: /admin/db/add
- name: Clear DB
url: /admin/db/clear
Run Code Online (Sandbox Code Playgroud)
Python路由:
app = webapp2.WSGIApplication([('/', MainHandler),
('/vote', SubmitVote),
('/clear_session', ClearUserSession),
('/admin/db/clear', ClearDatabase),
('/admin/db/add', ManualAddToDatabase)],
debug=True)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这一切都在我的本地机器上进行测试和运行.谢谢你的帮助.
python ×2
angularjs ×1
jasmine ×1
karma-runner ×1
mongodb ×1
mongoengine ×1
unit-testing ×1
yaml ×1