业力茉莉花没有执行所有测试
karma jasmine not executing all tests
所以我有 6 个业力茉莉花测试,在一个文件中我有 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);
});
});
在我的控制台日志中显示执行了 4 个,共 6 个
PhantomJS 1.9.8 (Mac OS X 0.0.0): Executed 4 of 6 SUCCESS (0.004 secs
/ 0.029 secs)
所以出于某种原因,在工厂测试文件中的第一个 'it' 之后,它跳过了其他两个,即使没有失败并且所有都包含在 beforeEach
那么,让我们从这里开始吧。将您的文件更改为此以清除一些内容并查看它是否消失。您还需要在上次测试中定义 answers。
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!!!!
});
});
});
除了已接受的答案之外,无论如何这是一个更好的测试结构,我发现了可重现的场景:测试中发现的嵌套 beforeEach
部分导致 Karma 停止 运行宁任何进一步的茉莉花测试。您可以在问题中看到确实如此 - 注入的 beforeEach
在外部 beforeEach
.
内
作为合并的一部分,我们 beforeEach
加载被测模块的行之一已被无意中移动到后来的 beforeEach
中。这阻止了那个 运行ning 之后的所有测试。 Karma 报告说 x of y 测试是 运行ning,其中 x 比 y 小 65,但是测试 运行 成功并且跳过了 none。
因此,如果您遇到这种情况,请检查最后一个 'successfully' 执行测试的报告输出(我在引号中说成功,因为它可能是导致问题的原因)并查看是否没有嵌套 beforeEach
在里面。
也相关:
如果在测试命中任何 expect
之前抛出异常,也可能发生这种情况 - 这不会导致测试被报告为失败 - 因为它从来没有 运行。它 将 显示为减少的 运行 测试次数。在这种情况下,您可以检查控制台日志是否有错误。
所以我有 6 个业力茉莉花测试,在一个文件中我有 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);
});
});
在我的控制台日志中显示执行了 4 个,共 6 个
PhantomJS 1.9.8 (Mac OS X 0.0.0): Executed 4 of 6 SUCCESS (0.004 secs / 0.029 secs)
所以出于某种原因,在工厂测试文件中的第一个 'it' 之后,它跳过了其他两个,即使没有失败并且所有都包含在 beforeEach
那么,让我们从这里开始吧。将您的文件更改为此以清除一些内容并查看它是否消失。您还需要在上次测试中定义 answers。
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!!!!
});
});
});
除了已接受的答案之外,无论如何这是一个更好的测试结构,我发现了可重现的场景:测试中发现的嵌套 beforeEach
部分导致 Karma 停止 运行宁任何进一步的茉莉花测试。您可以在问题中看到确实如此 - 注入的 beforeEach
在外部 beforeEach
.
作为合并的一部分,我们 beforeEach
加载被测模块的行之一已被无意中移动到后来的 beforeEach
中。这阻止了那个 运行ning 之后的所有测试。 Karma 报告说 x of y 测试是 运行ning,其中 x 比 y 小 65,但是测试 运行 成功并且跳过了 none。
因此,如果您遇到这种情况,请检查最后一个 'successfully' 执行测试的报告输出(我在引号中说成功,因为它可能是导致问题的原因)并查看是否没有嵌套 beforeEach
在里面。
也相关:
如果在测试命中任何 expect
之前抛出异常,也可能发生这种情况 - 这不会导致测试被报告为失败 - 因为它从来没有 运行。它 将 显示为减少的 运行 测试次数。在这种情况下,您可以检查控制台日志是否有错误。