Javascript karma jasmine没有执行所有测试
所以我有6个karma jasmine测试,在一个文件中我有3个,我在测试我所有的工厂 工厂的测试文件如下所示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
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。其他三个测试都在控制器上,执行的第四个测试是工厂测试中的第一个测试,我知道这一点,因为如果我将测试更改为失败的表达式,它会显示在日志中,这就是发生在我身上的事情。同时,我也有一个使它,使我的控制台日志不显示。