小编Dan*_*ath的帖子

在单元测试期间无法模拟admin.firestore()

我正在阅读如何为firebase模拟谷歌云功能,并且有正确模拟以下代码的问题:

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var db = admin.firestore();
Run Code Online (Sandbox Code Playgroud)

链接中的示例使用以下代码来模拟initializeApp哪些工作正常

admin = require('firebase-admin');
adminInitStub = sinon.stub(admin, 'initializeApp');
Run Code Online (Sandbox Code Playgroud)

现在admin.firestore在firebase-namespace.js中定义如下:

Object.defineProperty(FirebaseNamespace.prototype, "firestore", {
    get: function () {
        var ns = this;
        var fn = function (app) {
            return ns.ensureApp(app).firestore();
        };
        return Object.assign(fn, require('@google-cloud/firestore'));
    },
    enumerable: true,
    configurable: true
});
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种各样的东西来存根,但我失败了

  1. 结果firestore is not a function:

        Object.defineProperty(admin, "firestore", {
            get: function () {
                return 32;
            }
        });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 根本不模拟firestore()并调用失败的原始函数:

        sinon.stub(admin, 'firestore').returns({get() { }});
    
    Run Code Online (Sandbox Code Playgroud)
  3. TypeError:不能存根不存在的自有属性get

       firestoreStub …
    Run Code Online (Sandbox Code Playgroud)

javascript unit-testing sinon firebase-admin google-cloud-firestore

12
推荐指数
1
解决办法
2249
查看次数

以django形式显示布尔模型字段作为单选按钮而不是默认的复选框

这就是我的方法,在表单中显示一个布尔模型字段作为单选按钮是和否.

choices = ( (1,'Yes'),
            (0,'No'),
          )

class EmailEditForm(forms.ModelForm):

    #Display radio buttons instead of checkboxes
    to_send_form = forms.ChoiceField(choices=choices,widget=forms.RadioSelect)

    class Meta:
    model = EmailParticipant
    fields = ('to_send_email','to_send_form')

    def clean(self):
    """
    A workaround as the cleaned_data seems to contain u'1' and u'0'. There may be a better way.
    """

    self.cleaned_data['to_send_form'] = int(self.cleaned_data['to_send_form'])
    return self.cleaned_data
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中看到的,我需要一个将输入字符串转换为整数的clean方法,这可能是不必要的.

有没有更好的和/或djangoic方式来做到这一点.如果是这样,怎么样?

不,使用BooleanField似乎会导致更多问题.使用它对我来说似乎很明显; 但事实并非如此.为什么会如此.

django validation django-forms

11
推荐指数
2
解决办法
1万
查看次数

从Android客户端将图像存储到Blobstore并检索blobkey并上传URL以存储在Datastore中. - GAE

在我的Android应用程序中,我想将图像上传到Blobstore,然后检索上传URL和图像的Blobkey,这样我就可以将Blobkey存储在DataStore中.

我试过这段代码,但我的图片没有上传:

Servlet(返回上传网址)

BlobstoreService blobstoreService = BlobstoreServiceFactory
            .getBlobstoreService();
public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        UploadOptions uploadOptions = UploadOptions.Builder
                .withGoogleStorageBucketName("photobucket11")
                .maxUploadSizeBytes(1048576);
        String blobUploadUrl = blobstoreService.createUploadUrl("/upload",
                uploadOptions);

        // String blobUploadUrl = blobstoreService.createUploadUrl("/uploaded");

        resp.setStatus(HttpServletResponse.SC_OK);
        resp.setContentType("text/plain");

        PrintWriter out = resp.getWriter();
        out.print(blobUploadUrl);

    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        doGet(req, resp);
    }
Run Code Online (Sandbox Code Playgroud)

代码:Android客户端

Bitmap bmp = BitmapFactory.decodeFile(imagePath);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                bmp.compress(CompressFormat.JPEG, 75, out);
                byte[] imgByte = out.toByteArray();
                String encodedImage = Base64.encodeToString(imgByte,
                        Base64.DEFAULT);

                HttpClient httpClient = new DefaultHttpClient(); …
Run Code Online (Sandbox Code Playgroud)

google-app-engine android blobstore google-cloud-datastore

11
推荐指数
2
解决办法
4703
查看次数

如何在JUnit中解决"你还没有开始一个Objectify上下文"?

我在JUnit中运行了一些Objectify测试代码,我收到了这个错误:

java.lang.IllegalStateException: You have not started an Objectify context. You are probably missing the ObjectifyFilter. If you are not running in the context of an http request, see the ObjectifyService.run() method.
    at com.googlecode.objectify.ObjectifyService.ofy(ObjectifyService.java:44)
    at com.googlecode.objectify.impl.ref.LiveRef.<init>(LiveRef.java:31)
    at com.googlecode.objectify.Ref.create(Ref.java:26)
    at com.googlecode.objectify.Ref.create(Ref.java:32)
    at com.netbase.followerdownloader.repository.DownloadTaskRepositoryImpl.create(DownloadTaskRepositoryImpl.java:35)
    at com.netbase.followerdownloader.repository.DownloadTaskRepositoryImplTest.setUp(DownloadTaskRepositoryImplTest.java:45)
Run Code Online (Sandbox Code Playgroud)

如何为测试代码解决此问题?

google-app-engine objectify google-cloud-datastore

11
推荐指数
2
解决办法
5663
查看次数

高级和低级Java API有什么区别?

我从这里学习Google App Engine和Googles数据存储,他们不断提到"低级Java API".

究竟什么是"低级Java API",它与"高级Java API"(我认为必须存在,因为它有一个低级别的Java API)有何不同?

谷歌搜索对这个问题的结果不佳.

java google-cloud-datastore

11
推荐指数
2
解决办法
8048
查看次数

Firestore web无法访问firestore后端

这是错误消息: @firebase/firestore: Firestore (4.12.1): Could not reach Firestore backend

我正在构建一个Web应用程序,它今天工作正常,在几次登录/注销后,我开始收到此错误消息.我再次初始化了firestore配置,问题仍然存在.使用firestore 4.11.0版本抛出相同的错误消息.

javascript firebase google-cloud-firestore

11
推荐指数
1
解决办法
1639
查看次数

前端设计第一,还是后端开发第一?对于Ruby on Rails站点

我自己做的就是:前端和后端.我精通HTML和CSS,但是Ruby on Rails中的菜鸟.既然我想开发这个网站,我想知道我是应该从前端开始还是从后端开始.我现在为前端做的事情都是静态的.当我做后端时,我担心我必须改变很多前端编码.

frontend ruby-on-rails backend

10
推荐指数
1
解决办法
3153
查看次数

GAE HDR:按键的实体检索最终是否在XG事务中保持一致?

考虑"使用事务"中的第二个示例("使用命名密钥更新实体,或者如果它尚不存在则创建它"):

https://developers.google.com/appengine/docs/java/datastore/transactions

现在考虑这种情况.多人游戏只允许任意两个玩家之间的单一匹配.为了确保这一点,使用每个玩家的键创建一个键.此键用作UniqueMatch实体的键.

因此,为了创建匹配,将创建XG事务.在此交易中:

  1. 我们检查是否已经存在具有该密钥的UniqueMatch实体.如果使用该键的datastore.get()调用没有抛出EntityNotFoundException,那么我们知道这两个玩家之间的匹配已经存在,所以我们回滚()并向玩家显示错误消息.

  2. 我们将()所有需要放入的实体放入以创建匹配项.这包括UniqueMatch实体以及其他一些实体.

  3. 然后提交事务.

这似乎工作正常.但是,我注意到我可以在短时间内在任意两个玩家之间创建两场比赛.在一小段时间内(实际上其中一个测试中最多10-20秒),我对datastore.get(key)的调用抛出了EntityNotFoundException,即使该键已经被put().

这似乎是最终的一致性.但是,关键的实体回顾不是保证强烈一致吗?此保证是否受到在XG交易中完成的事实的影响?

提前致谢,

java google-app-engine transactions eventual-consistency google-cloud-datastore

10
推荐指数
1
解决办法
253
查看次数

如何改变ndb重复属性?

appengine文件说明了重复的ndb专业人士:

更新重复属性时,您可以为其分配新列表或改变现有列表.

https://developers.google.com/appengine/docs/python/ndb/properties#repeated

两个问题:

  1. 我只是改变列表而不是添加新列表时保存写操作?

  2. 我该怎么做突变?只需附加对象并删除列表中的项目,就像我在python中使用列表一样?

谢谢!

python google-app-engine google-cloud-datastore

10
推荐指数
1
解决办法
2677
查看次数

对于数据存储区javascript API,公共API访问不能与gapi.client一起使用

我是谷歌云数据存储的新手.我目前正在尝试使用我在开发人员控制台创建的API密钥来查询我的数据集.下面是我调用数据存储区API的代码片段(我使用的是gapi.client):

gapi.client.setApiKey('API_KEY');
gapi.client.load('datastore', 'v1beta2').then(function() { 
    console.log('loaded.'); 
    gapi.client.datastore.datasets.runQuery({'datasetId' : 'myProjectId','gqlQuery': {  'queryString': 'select * from locationReport'}}).then(function(resp) {
            console.log(resp.result);
        }, function(reason) {
            console.log('Error: ' + reason.result.error.message);}
        );
});
Run Code Online (Sandbox Code Playgroud)

这回复了以下回复:

响应标头:

HTTP/1.1 401 Unauthorized
Vary: Origin
Vary: X-Origin
WWW-Authenticate: Bearer realm="https://accounts.google.com/"
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Date: Mon, 22 Jun 2015 14:49:06 GMT
Expires: Mon, 22 Jun 2015 14:49:06 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic,p=1
Transfer-Encoding: chunked
Run Code Online (Sandbox Code Playgroud)

回应机构:

要求登录

虽然这里提到可以使用公共API访问数据,但我仍然无法这样做.

请帮我解决一下这个.让我知道是否可能或是否有任何其他方法从数据存储区检索数据而无需OAuth等用户权限

javascript google-cloud-datastore gapi

10
推荐指数
1
解决办法
379
查看次数