断言失败后的摩卡流量控制

时间:2017-10-17 19:20:03

标签: javascript mocha chai

我认为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()
}

我认为这太复杂了,所以我想知道是否有更简单的方法呢?

4 个答案:

答案 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