Javascript karma jasmine没有执行所有测试

Javascript karma jasmine没有执行所有测试,javascript,angularjs,unit-testing,jasmine,karma-jasmine,Javascript,Angularjs,Unit Testing,Jasmine,Karma Jasmine,所以我有6个karma jasmine测试,在一个文件中我有3个,我在测试我所有的工厂 工厂的测试文件如下所示 describe('Quiz Factories', function() { beforeEach(function() { //Ensure angular modules available beforeEach(module('geafApp')); beforeEach(inject(function (_coun

所以我有6个karma jasmine测试,在一个文件中我有3个,我在测试我所有的工厂

工厂的测试文件如下所示

describe('Quiz Factories', function() {

    beforeEach(function() {

        //Ensure angular modules available
        beforeEach(module('geafApp'));

        beforeEach(inject(function (_counter_) {
            counter = _counter_;
        }));

        beforeEach(inject(function (_answer_sheet_) {
            answer_sheet = _answer_sheet_;
        }));

        beforeEach(inject(function (_questions_) {
            questions = _questions_;
        }));

    });

    it('it should return a number', function () {
        expect(counter).toBeNumber();
    });

    it('it should return an empty object', function () {
        expect(answer_sheet).toBeEmptyObject();
    });

    it('it should return an empty object', function () {
        expect(questions).toHaveObject(answers);
    });

});
在我的控制台日志中,它显示执行了6个中的第4个

PhantomJS 1.9.8(Mac OS X 0.0.0):6次成功执行4次(0.004秒) /0.029秒)


因此,由于某种原因,在工厂测试文件中的第一个it“it”之后,它跳过了另外两个,即使没有故障,并且所有故障都包含在beforeach中。那么,让我们从这里开始。将您的文件更改为此,以清除一些内容,并查看它是否消失。您还需要在上一次测试中定义答案

describe('Quiz Factories', function() {

  var counter, answerSheet, questions;

  beforeEach( function(){
    module( 'geafApp' );

    inject( function( _counter_, _answer_sheet_, _questions_ ){
      counter = _counter_;
      answerSheet = _answer_sheet_;
      questions = _questions_;
    });
  });

  describe( 'when a question is asked', function(){
    it( 'should return a number', function(){
      expect( counter ).toBeNumber();
    });

    it( 'should return an empty object', function(){
      expect( answerSheet ).toBeEmptyObject();
    });

    it( 'should return an empty object', function(){
      expect( questions ).toHaveObject( answers ); // ??? answers is not defined!!!!
    });
  });
});

除了公认的答案(不管怎样,这对于测试来说是一个更好的结构)之外,我还发现了一个可重复的场景:在测试中发现的每个节之前嵌套的
,会导致Karma停止运行任何进一步的Jasmine测试。您可以在问题中看到,情况确实如此-用于注入的
beforeach
位于外部
beforeach

作为合并的一部分,加载被测模块的
beforeach
行中的一行在随后的
beforeach
行中意外移动。这将阻止运行该测试之后的所有测试。Karma报告说,在x比y小65的情况下运行了x/y测试,但测试运行成功,没有跳过任何测试

因此,如果您遇到这种情况,请检查上一次“成功”执行测试的报告输出(我在引号中说成功,因为它可能是导致问题的原因),并查看在每个测试之前是否没有嵌套的

同样相关:


如果在测试命中任何
expect
之前抛出异常,也可能发生这种情况-这不会导致测试报告为失败-因为它从未运行过。它将显示为运行测试的减少数量。在这种情况下,您可以检查控制台日志中的错误。

显示其他文件。此外,您还可以将三个beforeach注入组合成一个beforeach。您还需要查看哪些其他文件?组合喷油器的测试或应用仍然会导致相同的行为,您仅显示了6项测试中的三项。其余的人呢?其他测试是否正在运行?第四次测试来自哪个文件?显示karma.config。其他三个测试都在控制器上,执行的第四个测试是工厂测试中的第一个测试,我知道这一点,因为如果我将测试更改为失败的表达式,它会显示在日志中,这就是发生在我身上的事情。同时,我也有一个使它,使我的控制台日志不显示。