如何解决为什么 process.env.FIRESTORE_EMULATOR_HOST 在测试环境中是未定义的?即使我已经运行了模拟器
我正在使用
- 节点 14
- firebase 函数测试:0.2.3
- firebase 管理员:9.6.0
- firebase 函数:3.13.2
- firebase 工具:9.10.0
- 摩卡咖啡:8.3.2,
- ts 节点:9.1.1
如果我运行 firebase emulators:start
然后我希望 process.env
将具有类似的属性
"FUNCTIONS_EMULATOR": "true","FIRESTORE_EMULATOR_HOST": "localhost:8080"
现在我需要使用 mocha 为我的云函数创建测试,我将使用 Firestore 和函数模拟器对其进行测试,我给我的文件名 events_cron_job.test.ts
运行模拟器后,我尝试控制台记录这些值,但我得到了这样的未定义
我期待
console.log(process.env.FUNCTIONS_EMULATOR) // will be "true"
console.log(process.env.FIRESTORE_EMULATOR_HOST) // will be "localhost:8080"
我认为这只会发生在测试环境中(我使用的是 mocha),我有常规的 http 触发器并且它按预期工作
在运行模拟器之前,我尝试在终端上执行此操作
export FIRESTORE_EMULATOR_HOST="localhost:8080"
export FUNCTIONS_EMULATOR="true"
然后执行 firebase emulators:start
,但结果将是相同的,我仍然对这些值未定义
因为这些值是未定义的,所以如果我的笔记本电脑与互联网断开连接,那么这个测试将不会运行(即它只会访问生产服务器中的数据,而不是模拟器!),我希望测试仍然会运行即使没有互联网连接,因为我使用模拟器。
我使用
运行 mocha 测试mocha -r ts-node/register src/tests/cloud_function_tests --recursive --extension .test.ts --timeout 60000 --exit
解决方法
正如您在此 Github issue comment 中看到的,为了使用 Firebase 模拟器运行测试,您应该使用以下命令来触发它:
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\grpc_helpers.py",line 166,in error_remapped_callable
return _StreamingResponseIterator(result,prefetch_first_result=prefetch_first)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\grpc_helpers.py",line 89,in __init__
self._stored_first_result = six.next(self._wrapped)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\grpc\_channel.py",line 426,in __next__
return self._next()
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\grpc\_channel.py",line 826,in _next
raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNKNOWN
details = "Exception iterating requests!"
debug_error_string = "None"
>
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\gevent\pywsgi.py",line 999,in handle_one_response
self.run_application()
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\geventwebsocket\handler.py",line 75,in run_application
self.run_websocket()
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\geventwebsocket\handler.py",line 52,in run_websocket
list(self.application(self.environ,lambda s,h,e=None: []))
File "C:\Python39\lib\site-packages\flask\app.py",line 2464,in __call__
return self.wsgi_app(environ,start_response)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\flask_sockets.py",line 45,in __call__
handler(environment,**values)
File "C:\Users\ADMIN\Desktop\python\vonageBot\echoServer.py",line 122,in echo_socket
responses = client.streaming_recognize(streaming_config,requests)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\cloud\speech_v1\helpers.py",line 81,in streaming_recognize
return super(SpeechHelpers,self).streaming_recognize(
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\cloud\speech_v1\services\speech\client.py",line 616,in streaming_recognize
response = rpc(requests,retry=retry,timeout=timeout,metadata=metadata,)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\gapic_v1\method.py",line 145,in __call__
return wrapped_func(*args,**kwargs)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\retry.py",line 281,in retry_wrapped_func
return retry_target(
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\retry.py",line 184,in retry_target
return target()
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\timeout.py",line 102,in func_with_timeout
return func(*args,**kwargs)
File "C:\Users\ADMIN\AppData\Roaming\Python\Python39\site-packages\google\api_core\grpc_helpers.py",line 168,in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc),exc)
File "<string>",line 3,in raise_from
google.api_core.exceptions.Unknown: None Exception iterating requests!
2021-04-19T08:52:01Z {'REMOTE_ADDR': '::1','REMOTE_PORT': '50054','HTTP_HOST': 'xxc8573d03e9.ngrok.io',(hidden keys: 30)} failed with Unknown
这是 Firebase 团队使用模拟器执行测试的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。