【问题标题】:Determining when karma-pact mock server has started确定 karma-pact 模拟服务器何时启动
【发布时间】:2017-05-02 12:48:09
【问题描述】:

我们正在使用 karma-pact 插件来运行我们的 pact JS 客户端测试,基于来自 https://github.com/pact-foundation/pact-js/blob/master/karma/mocha/client-spec.js 的示例。

在示例中,before() 中存在超时,我相信在运行测试之前确保模拟服务已启动(请参阅“较慢的 Travis CI 构建所需的注释”)。

我不愿意在我们的测试中设置固定超时,因为在不同的环境(例如 CI 与本地)中它要么太短要么太长,所以我正在寻找一种方法来检查服务器是否已启动.

我尝试使用 pact API https://github.com/pact-foundation/pact-node#check-if-a-mock-server-is-running ,但是这似乎启动了一个新的模拟服务器,该服务器与 karma-pact 插件启动的服务器冲突(尝试运行 pact 时报告错误:kill ESRCH 错误.createServer().running 从测试中)。

有没有办法确定模拟服务器是否已启动,例如通过等待 URL 变为可用?可能有一种方法可以获取由 karma-pact 插件启动的模拟服务器的引用,以便使用 pact-node API?

【问题讨论】:

    标签: javascript mocha.js karma-runner pact


    【解决方案1】:

    其实最简单的方法就是等待端口被使用。

    Karma Pact 默认情况下将在端口1234 上启动 Mock(您可以指定自己的)。端口启动后,服务正在运行,您可以继续。

    例如,您可以使用 wait-for-host 之类的东西来检测正在运行的模拟服务:

    var waitForPort = require('wait-for-port');
    
    waitForPort('localhost', 1234, function(err) {
      if (err) throw new Error(err);
      // ... Mock Service is up - now we can run the tests
    });
    

    【讨论】:

    • 有趣的想法,我会尝试一下。我是否认为isPortAvailable function 将在模拟服务器尝试启动时使用该端口并阻止模拟服务器启动的可能性很小?
    • 实际上该功能与您想要的完全相反 - 完全正确。它实际上用于在启动服务器之前确定端口是否空闲。希望你能明白这一点!我会更新答案
    • 对,这与我们想要做的相反。我确实有一种烦人的感觉,使用这种方法可能会导致模拟服务器无法启动(因为检查打开了端口 1234,尽管是短暂的)。
    • 是的,肯定有很大的冲突机会,这就是你不会使用这种方法的原因。我已更新我的回复以澄清立场。
    • 不幸的是,我们的测试在没有“net”节点包的 PhantomJS 中运行。还尝试了同样需要网络的 'wait-for-url' npm 包。
    猜你喜欢
    • 2017-12-21
    • 2023-02-15
    • 2022-08-04
    • 2016-02-10
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多