下面我有一些代码来演示我如何测试/存根一个promise,<div class="toolbar-container">
<div class="search-bar"></div>
<div class="filter-group">
<div class="filters"></div>
<div class="buttons"></div>
</div>
</div>
.toolbar-container {
display: flex;
}
.search {
}
.filter-group {
display: flex;
justify-content: space-between;
}
.filters {
flex-wrap: wrap;
}
.buttons {
}
下面的函数使用了参数promise useSpyPromise
。我试图找出如何指定存根以在第一次调用(spyPromise
)上返回一个承诺,并在第二次调用时解析另一个承诺(Promise.resolve(['hasLength']
)。
Promise.resolve([]
答案 0 :(得分:0)
很难确切地说出你想要什么,但有一点似乎很确定;提供测试是同步的 - 即。没有进一步的承诺 - 那么你不需要promise1
和promise2
,只需return spyPromise.then(...)
。
您可能只希望行为完全由d.length
决定,在这种情况下,它很简单:
function useSpyPromise(spyPromise) {
return spyPromise.then(d => {
if(d.length <= 1) {
throw new Error('d ' + d.length);
}
return d;
});
}
但是,如果您真的希望将函数调用的次数考虑在内,那么可能是这样的:
var count = 0;
function useSpyPromise(spyPromise) {
count += 1;
return spyPromise.then(d => {
if(count === 0 && d.length === 0) {
throw new Error('d 0');
if(count === 1 && d.length === 1) {
throw new Error('d ' + d.length);
}
return d;
});
}
这是一个非常奇怪的事情,但也许它是你的应用程序所需要的。我不能告诉你。
无论哪种方式,这都不是故事的结局。您可以通过多种方式制定测试。例如,count > 1
条件应该抛出?这个问题并没有这么说,但你考虑过那些案例吗?
您所写的内容取决于您想要的确切行为。