我在Typescript中编写了我的mocha测试,现在我正在es6中编译它
tsc *.ts --target es6 -m commonjs --watch
我在控制台中没有错误,
但是在WebStorm中,我用红色标记每个'should'chai-keyword(当我悬停它时,我得到一条消息: ts2339:属性'应该'在Bluebird类型上不存在 )。
例如我正在使用'chai',我想检查期望值是否为真:
import * as chai from "chai";
export class WrapedChai {
public shouldBeTrue(valueToTest : any){
let expectedValue : boolean = true;
expectedValue.should.equal(valueToTest);
}
// or usintg SHOULD with a Promise
public belongsToGLOErrorPromise(valueToTest: any) {
let expectedValue : boolean = true;
return Promise.resolve(expectedValue).should.eventually.equal(valueToTest);
}
}
并且应始终以红色加下划线。
我试过了:
import { should } from 'chai';
should();
和此:
import chai = require('chai');
var should = chai.should();
但是'应该仍然将下划线标记为错误。
答案 0 :(得分:0)
好的,我解决了这个问题。
解决问题的第一种方法(使用黑客):
问题在于TypeScript中的类型。而不是写
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
我将这部分分为两部分并写成:
let helpVariable : any = Promise.resolve(isInstance);
return helpVariable.should.eventually.equal(expectedValue);
这样我就应该对任何类型的变量抱怨。
出于某种原因'应该'如果它应用于任何其他类型(如:boolean,int,number,string ...),则下划线为错误
解决问题的第二种方法(使用'导出'关键字而不是'应该'):
首先导入关键字' export'像这样:
import {expect} from 'chai';
然后,而不是写:
return Promise.resolve(isInstance).should.eventually.equal(expectedValue);
写:
return export(Promise.resolve(isInstance)).eventually.equal(expectedValue);
答案 1 :(得分:0)
这可以用npm install @types/chai
解决。
答案 2 :(得分:0)
当前版本的Chai不再支持与“ any”不同的类型。
因此,建议您强制转换为“任意”。
4.2.0之前的先前版本仍然支持所有类型,因此使用先前版本可以解决该问题,并且可以毫无问题地使用它:
let expectedValue : boolean = true;
expectedValue.should.equal(valueToTest);