我认为mocha在断言失败后停止运行当前的测试用例,就像这个
it('test', function(done) {
a.should.equal(b);
//if a is not equal to be, won't go here
//do something
done();
}
我需要在断言失败后继续做一些事情,我尝试使用try ... catch,但是没有“else”用于catch,所以如果我这样做
try {
a.should.equal(b)
} catch(e) {
console.log(e)
done(e)
} finally {
//do something
done()
}
这将调用done()两次,所以我必须添加一个标志,
var flag = true;
try {
a.should.equal(b)
} catch(e) {
console.log(e)
flag = false
done(e)
} finally {
//do something
if(flag)
done()
}
我认为这太复杂了,所以我想知道是否有更简单的方法呢?
答案 0 :(得分:0)
它被调用两次的原因是因为<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.26</version>
</dependency>
正在处理异常,但set.seed(2)
df = data.frame(Date=seq(as.Date("2010-01-01"),as.Date("2015-12-31"), by="1 day"))
df$value = cumsum(rnorm(nrow(df)))
year_labels <- rep(c('J','F','M','A','M','J','J','A','S','O','N','D')p,6)
# The plot we'll start with
p = ggplot(df, aes(Date, value)) +
geom_vline(xintercept=as.numeric(df$Date[yday(df$Date)==1]), colour="grey60") +
geom_line() +
# scale_x_continuous(labels = year_labels) +
scale_x_date("Date",breaks = c(seq(from=as.Date("2010-01-01"),to=as.Date("2015-12-31"),by="month")),
labels = year_labels)
p
块将总是执行,无论断言是否抛出错误。
使用catch
来处理您的方案 - 如果发现异常,它将返回错误,否则它将跳过捕获并只是finally
。
return
如果需要在if / else场景中使用它,可以使用变量处理它。
return done()
答案 1 :(得分:0)
请记住,最终将执行失败或失败。这就是它执行两次完成的原因。
//lager program lab
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define DEPOSIT 10
#define WORDLENGTH 30
#define MAX 10
struct varor{
int varunummer;
char namn[WORDLENGTH];
int lagersaldo;
};
typedef struct varor Vara;
Vara createVara(int varunummer, char namn[], int lagersaldo){
Vara v;
v.varunummer=varunummer;
strcpy(v.namn, namn);
v.lagersaldo=lagersaldo;
return v;
}
void isVaraRegistered(Vara reg[], int varunummer){
for(int n=0; n<MAX; n++){
if(reg[n].varunummer==varunummer) {
printf("\nError! Varunummer finns redan!\n\n");
}
break;
}
}
void regVaror( Vara reg[], int *pNrOfVaror){
char confirm;
char namn[WORDLENGTH],
tmp[WORDLENGTH];
int varunummer, lagersaldo;
printf("\nÄr du säkert att du vill registrera nya varor?\n1: Ja - (fortsätt)\n2: Nej - (gå tillbaka till menyn)\n");
scanf(" %c%*c", &confirm);// %*c för att inte skippa raden dvs skipppa ange varunummer
switch(confirm){
case '1':
do{
printf("Ange varunummer:");
gets(tmp);
varunummer=atoi(tmp);
isVaraRegistered(reg,varunummer);
printf("Ange namn:");
gets(namn);
printf("Ange lagersaldo:");
gets(tmp);
lagersaldo=atoi(tmp);
reg[*pNrOfVaror]=createVara(varunummer,namn,lagersaldo);
(*pNrOfVaror)++;
printf("\nRegristrera mer varor?\n1: Ja - (fortsätt)\n2: Nej - (gå tillbaka till menyn)\n");
scanf(" %c%*c", &confirm);
}while(confirm=='1');
case '2': break;
}
}
int main(){
int run=1;
Vara vRegister[MAX];
int nrOfVaror=0;
while(run){
char choice;
printf("\n\t\tMeny - Lager Program\n\n\
(1) Regristrera nya varor\n\b\b\b\b\
(2) Skriva ut alla varor\n\
(3) Söka efter varor\n\
(4) Ändra lagersaldot för varor\n\
(5) Sortera varor\n\
(6) Avregristrera varor\n\
(7) Avsluta programmet\n");
scanf(" %c%*c", &choice);
if(choice=='1') regVaror(vRegister, &nrOfVaror);
else if(choice=='7') run=0;
}
return 0;
}
如果失败,你将退出捕获,否则你继续正常返回。
答案 2 :(得分:0)
当测试失败时,仍会调用after
挂钩,因此您可以将测试置于具有此类挂钩的上下文中:
describe('suite', function() {
after(function(done) {
// do something
done();
});
it('test', function(done) {
a.should.equal(b);
done();
}
});
答案 3 :(得分:0)
测试跑步者的工作,以确定是否应保释或继续测试套件中的其他测试。
如果您希望测试继续运行,请从--bail
中删除mocha.opts
https://mochajs.org/api/mocha