当前位置: 首页 > 知识库问答 >
问题:

Jasmine运行了三次测试

许博
2023-03-14

我正在我的开发箱上运行Karma/Jasmine/Angular 2.0测试。就在最近,我的开发箱上的Jasmine决定开始运行我的测试三次。是的,整整三次,每次都是。

在第一次运行时,一切都按预期通过。然而,在第二次和第三次通过时,所有相同的事情都失败了。它总是承认有7次测试,但运行21次,10次失败(一年级数学)???

这在Travis和SauceLabs上也失败了。(注意:这链接到一个包含3个测试的旧版本,但运行了9个,5个失败了???)

我有一个截图,karma.conf.js文件,还有一个套件,它启动了整个过程。非常感谢您的帮助。

完整源代码

describe('From the Conductor Service', () => {
    let arr: Array<ComponentStatusModel> = null;
    let svc: ConductorService = null;
    
    beforeEach(() => {  
        arr = [/* Inits the array*/];
        svc = new ConductorService();
    });

    describe('when it is handed a container to hold objects which need to be loaded', () => {
        // More passing tests...
    
        /// vvvvv The culprit !!!!!
        describe('then when you need to access the container', () => {
            beforeEach(() => {
                svc.loadedContainer = arr;
            });
        
            it('it should always be available', () => {
                assertIsLocalDataInTheService(arr, svc.loadedContainer);
            });
        });
        /// ^^^^^ End of culprit !!!!!
    });

    // More passing tests...
});

不确定这是否相关,但在所有错误发生之前,Jasmine调用堆栈较小(左侧,观察滚动条)。错误开始后,堆栈会随着对相同函数的重复调用而变大(右,观察滚动条)。

在我的测试中,纳米棒和导体规范文件是完全分开的。但是,您可以看到suites阵列包含来自纳米棒和导体规格的内容。不知何故,Jasmine将这两个规范文件混合在一起(在一切都开始失败之后),导致我的descripe()语句在发布到控制台时没有任何意义。

完整源代码

module.exports = function (config) {
    config.set({
        autoWatch: false,
        basePath: '.',
        browsers: ['Chrome'],
        colors: true,
        frameworks: ['jasmine'],
        logLevel: config.LOG_INFO,
        port: 9876,
        reporters: ['coverage', 'progress'],
        singleRun: true,
        
        coverageReporter: {
            // Code coverage config
        },

        files: [
            // Loads everything I need to work
        ],

        plugins: [
            'karma-chrome-launcher',
            'karma-coverage',
            'karma-jasmine'
        ],

        preprocessors: {
            'app/**/*.js': ['coverage']
        },

        proxies: {
            // Adjust the paths
        }
    })
}

共有3个答案

狄钧
2023-03-14

我会试着调试这个问题并找出确切的原因。通常发生在我测试的函数中有重定向代码或任何重载代码的时候。

  • 您可以尝试在描述和它的前缀中添加一个f(即f描述和适合)
鲁钱明
2023-03-14

第一件事是这些测试随机运行。如果您在任何测试用例中传递一些数据,如果您认为可以恢复这是不可能的。

您必须在每个测试用例之前声明数据,以便所有测试用例都获取数据。所有测试用例都独立运行。

如果您使用的是数组或对象,则必须在深度克隆后使用它,因为数组和对象适用于引用。如果您操作任何值,它也会更改原始数组。

在大多数情况下,如果测试失败,您在测试用例中传递的数据可能会出错。

江德海
2023-03-14

您可以尝试在每个测试文件的第一个断言中刷新浏览器吗?试试这个:

browser.restart();

我也有同样的问题,这个为我解决了。

 类似资料:
  • 问题内容: 如何从命令行在Node.js上运行Jasmine测试?我已经通过npm安装了jasmine- node并编写了一些测试。我想在目录中运行测试并在终端中获取结果,这可能吗? 问题答案: 编辑 由于不再维护该软件包,因此这似乎不再是当前的最佳答案。请参阅下面的答案 你可以这样做 从您的测试目录 这会将茉莉花安装到../node_modules/jasmine-node 然后 从我的演示中做

  • 问题内容: 我正在尝试通过使用以下代码来检测我的应用程序之前是否已运行: (这是我的默认Android活动) 当我第一次运行该应用程序时,它表示是第一次,当我第二次,第一次,第三次,第一次运行时…。 我使用的是实际的Android设备,而并非每次都使用运行按钮。我使用Eclipse运行按钮运行该应用程序一次,然后关闭该应用程序并在手机上按其图标。 我的代码有问题吗? 问题答案: 更像是在状态之间进

  • 我们已经将(最新的windows)Chrome驱动程序下载到我们的项目中,并且我们能够运行如下Jasmine测试: 但我们未能在pom中设置上述系统属性。xml。我们尝试了<代码> 另一个插件: 我们不确定是否在错误的位置配置了Chromedriver路径。当我们只运行“mvn”时,当它运行jasmine测试时会出现以下错误: [ERROR]起因:ervice.createIllegalState

  • 我正在尝试用Jasmine和RequireJS做一些测试。一切都进行得很好,直到我注意到我所描述的函数的上下文出现了问题。 有人知道怎么解决这个吗?

  • 我为javascript编写了Jasmine测试。我正在尝试使用Phantomjs运行Jasmine测试。我从Phantomjs.org下载了Phantomjs并尝试使用phantomjs.exe//phantom jasmine路径运行它http://localhost/myJasmineTestRunner.html.Google帮不了我。有人能建议我如何使用phantomjs测试jasmin

  • 问题内容: 运行时,输出: 但是,当我再次运行后,所有测试都通过了。 仅当我重置mysql数据库然后首次运行时,测试才会失败。 对于每个请求,我都会做一个请求,以确保在数据库中创建了数据。 谁能帮助我确保测试按顺序运行?那是请求在请求之前运行? 问题答案: 您不能/不应该依赖测试执行顺序。没有定义测试的执行顺序,并且使用测试标志可以排除测试的运行,因此您无法保证它们将完全运行。 例如,以下命令将仅