我正在通过gulp运行业力测试案例如下:
gulp.task('unit-test-karma', function () {
return gulp.src(filePaths.libraryPaths.concat(filePaths.codePathsVerbose.concat(filePaths.testPaths).concat(filePaths.htmlPaths).concat(filePaths.jadePaths)))
//.pipe(plumber({ errorHandler: notify.onError(function(error) { console.log(error.message); return "Karma Error"; }) }))
.pipe(karma({
configFile: './karma.conf.js',
action: 'run', // watch
singleRun: true,
reporters: [ 'dots' ]
}));
});
当我以run
的操作运行时,IE 11会抛出错误。
IE 11.0.0 (Windows 10 0.0.0) ERROR
'expect' was used when there was no current spec, this could be because an asynchronous test timed out
at C:/BbCAT-WebDI/BbCAT-Web/BbCAT-Angular/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:938
但是,如果与watch
的操作一样运行,那么所有测试用例都会在chrome,IE和firefox中成功执行。
阅读一些帖子后,看来$ http服务电话有问题,但无法找到问题的确切位置!
答案 0 :(得分:2)
这是一个非常现实的问题,我目前也在遇到这个问题。我认为这里有一个核心错误。我有很好的封装测试。它们很小(每个最多3行)
我有一个带有2个嵌套描述的主要描述部分 首先描述有8个it()函数 第二个有3个()函数。
即
describe("main", ()=>{
describe("1st", ()=>{
//here are 8 it() definitions
})
describe("2nd", ()=>{
//here are 3 it() definitions
})
})
现在,当我从任一描述中删除单个it()定义时,问题就会消失。或者,如果我添加第3个describe(),问题就会消失。
这是茉莉花中的一个问题 - 要么他们没有正确报告错误,要么有可怕的错误。或者,可能是因为同时运行多个测试而试图变得智能的业力。无论哪种方式,这个问题都是真实的,它与凌乱的代码无关。
也许它与被测试的基础单元有关 - 我的函数是递归的(虽然我的测试用例不会深入研究)。
karma-jasmine@0.3.8
jasmine-core@2.4.1
karma@0.13.22
phantomjs-prebuilt@2.1.7
karma-phantomjs-launcher@1.0.0
答案 1 :(得分:1)
您是否可以嵌套一些应该分开的测试,或者在同一测试用例中解析多个异步调用?
我产生了同样的错误,但这是我自己做的。我在其中一个()中有两个异步测试。一旦任何一个承诺得到解决,测试就结束了。另一个承诺决议是孤立的。
考虑这些片段。假设被测函数在被调用时响应正确。
注意:为了更清楚地说明问题,我省略了then()的错误路径。
这种结构失败了。当任何一个promises返回并且done()被触发时,第二个现在失败了"'期望'当没有当前的规格时使用......"错误。
describe( "delay", function(){
var calculator = new Calculator();
it( "delays execution - add and subtract", function(done){
delay( 1000, calculator, 'add', [ 10, 5 ] )
.then(function(result){
expect(result).toEqual( 15 );
done(); // <---- as soon as this runs, test is over
});
delay( 500, calculator, 'subtract', [ 9, 5 ] )
.then(function(result){
expect(result).toEqual( 4 );
done(); // <---- as soon as this runs, test is over
});
});
} );
这是编写测试的正确方法。每个承诺都封装在自己的测试中。
describe( "delay", function(){
var calculator = new Calculator();
it( "delays execution - add", function(done){
delay( 1000, calculator, 'add', [ 10, 5 ] )
.then(function(result){
expect(result).toEqual( 15 );
done(); // <--- this is now the only resolution for this test
});
});
it( "delays execution - subtract", function(done){
delay( 500, calculator, 'subtract', [ 9, 5 ] )
.then(function(result){
expect(result).toEqual( 4 );
done(); // <--- this is now the only resolution for this test
});
});
} );
由于我还没有足够的声誉来发表评论,我在此提出请求。 : - )
如果这是你的问题,你能否将这个答案标记为正确?
答案 2 :(得分:1)
这里有同样的问题,结果是我用setTimeout进行了测试。清除了所有这一切!
答案 3 :(得分:0)
在Jasmine 3.5中也出现了此错误消息-它使我感到不应该,因为它在谈论异步并且我在项目中有其他人提供的jquery。
这只是设置测试的语法问题……我的原始照片
it("should ...")
expect(thing).toBe(whatever);
})
与工作相对……
it("should ...", function(){
expect(thing).toBe(whatever);
})
答案 4 :(得分:0)
我遇到了此错误,但这是因为我有一个describe
函数而内部没有it
函数。
不正确
describe('helpDocsDirective', function () {
expect(true).toBe(true);
});
正确
describe('helpDocsDirective', function () {
it("should return true", function () {
expect(true).toBe(true);
});
});