问题描述
我有一个要测试的功能。它返回一个承诺。这是一个假版本,只需稍等片刻,即可解决承诺。
var chai = require('chai') ;
var chaiAsPromised = require("chai-as-promised");
var expect = chai.expect;
chai.use(chaiAsPromised);
describe("Testing Promises",function() {
it("should return a particular value ",function() {
const testPromise = testee();
// no matter what I specify in the equal it always passes the test
expect(testPromise).to.eventually.equal(490);
});
我正在使用 Mocha、Chai 和 ChaiAsPromised,我尝试最终测试使用,认为这将等待承诺解决。我故意编写一个应该失败的测试,它通过了。为什么?
def read_rasters(files,test=False):
""""""
# sort the paths and create dates from them.
if test:
# only do 1000
paths = sorted(files)[-1000:]
else:
paths = sorted(files)
dates = [get_date_from_file(p) for p in paths]
# print('the dates',dates)
time = xr.Variable('time',pd.DatetimeIndex(dates))
print('determining chunks')
chunks = get_chunksize(path=paths[0],cog=False)
print('opening')
datasets = [rioxa.open_Rasterio(f,chunks=chunks) for f in paths]
return xr.concat(datasets,dim=time)
path_to_gridmet = r'path\to\Gridmet\Daily\eto'
gridmet_glob = r'path\to\Gridmet\Daily\eto\**\eto*.tif'
gridmet_files = glob(gridmet_glob,recursive=True)
gridmet_dset = read_rasters(gridmet_files,test=True)
print('done reading in eto')
print(gridmet_dset)
print('writing to file')
delayed_obj = gridmet_dset.to_netcdf(path=r'Z:\Data\ReferenceET\USA\Gridmet\Daily\gm_eto.nc',compute=False)
with ProgressBar():
results = delayed_obj.compute()
我知道还有其他方法可以在 Mocha 下管理异步处理,或者避免使用 Promises,但我想了解为什么我的测试没有像我预期的那样失败。
解决方法
由于断言语句是异步代码,您应该返回断言语句,以便 mocha
知道它应该等待调用此函数以完成测试。
请阅读关于chai-as-promised
的{{1}}和doc的asynchronous-code。
mocha