我使用梦幻般的Wallaby测试解决方案来运行实时测试,但默认情况下会拦截 stdout 和 stderr (有充分理由)。在我不希望这种情况发生的情况下,我可以通过将变量塞入console._restored = true;
命令来覆盖行为,如下所示:
_restored
这将由Wallaby测试跑者接收,并暂时将事件流发送回正常目的地。这个解决方案工作得很好但是Typescript并不高兴:
我正在尝试找到一些方法来添加" Console"的原型定义。接口。
在我的第一次粗略尝试中,我只是查找控制台的NodeJS定义,并添加到添加了 public IEnumerable<Location> GetChild(int id)
{
DBEntities db = new DBEntities();
var locations = db.Locations.Where(x => x.ParentLocationID == id || x.LocationID == id).ToList();
var child = locations.AsEnumerable().Union(
db.Locations.AsEnumerable().Where(x => x.ParentLocationID == id).SelectMany(y => GetChild(y.LocationId))).ToList();
return child;
}
属性的测试帮助文件中:
与大多数绝望案件一样,它以泪水结束。显然,仍然使用已定义的全局定义。
无论如何,任何帮助都将不胜感激。
答案 0 :(得分:2)
我最初的尝试实际上接近正确。您可以将界面Console
重新定义为:
// tslint:disable-next-line
interface Console {
_restored: boolean;
Console: typeof NodeJS.Console;
assert(value: any, message?: string, ...optionalParams: any[]): void;
dir(obj: any, options?: {showHidden?: boolean, depth?: number, colors?: boolean}): void;
error(message?: any, ...optionalParams: any[]): void;
info(message?: any, ...optionalParams: any[]): void;
log(message?: any, ...optionalParams: any[]): void;
time(label: string): void;
timeEnd(label: string): void;
trace(message?: any, ...optionalParams: any[]): void;
warn(message?: any, ...optionalParams: any[]): void;
}
但是你必须声明 console
作为新定义的界面:
declare var console: Console;
在我的测试帮助文件中定义了这个,我现在可以添加以下函数而不会出现错误:
export function restoreStdoutAndStderr() {
console._restored = true;
}
答案 1 :(得分:0)
将控制台界面扩展为您要添加的媒体资源:
interface Console {
_restored: boolean;
}
console._restored = true;
您可以看到它正常工作here。
但是,当您使用模块时,这似乎不起作用。在这种情况下,您必须在 .d.ts 文件中定义控制台界面。
interface Console {
_restored: boolean;
}
anywhereelse.ts:
import * as something from './something';
console._restored = true;