Mocha/Chai/ChaiAsPromised :期望承诺最终不等待解决

问题描述

我有一个要测试的功能。它返回一个承诺。这是一个假版本,只需稍等片刻,即可解决承诺。

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}}和docasynchronous-code

mocha

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...