首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问题:消费者驱动的合同测试与契约

问题:消费者驱动的合同测试与契约
EN

Stack Overflow用户
提问于 2020-06-08 09:37:29
回答 2查看 814关注 0票数 0

我正在为一个大学项目写一个小程序。我想用协议框架测试一下。不幸的是,没有为我创建任何Pact.json文件,尽管没有错误。我的消费者用Javascript写的。下面您可以看到我的javascript文件、控制台输出和我的package.json文件的源代码:

代码语言:javascript
复制
const {Pact} = require('@pact-foundation/pact');
const axios = require('axios');
const path = require('path');


describe('Pact Consumer', () => {
    const provider = new Pact({
        consumer: 'consumer',
        provider: 'producer',
        host:'127.0.0.1',
        port: 1234,
        log: path.resolve(process.cwd(), 'logs', 'pact.log'),
        dir: path.resolve(process.cwd(), 'pacts'),
        logLevel: 'INFO',
    });

    beforeAll(() => provider.setup());
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    describe('consumer', () => {

        beforeEach
        (() =>

            provider.addInteraction({
                state: "valid date",
                uponReceiving: "a request for JSON data",
                withRequest: {
                    method: "GET",
                    path: "/test",
                    headers: { Accept: "application/json" },
                },
                willRespondWith: {
                    status: 200,
                    headers: { "Content-Type": "application/json" },
                    body:
                        {
                            name: 'Scherr',
                            surname: 'Valerian',
                            age: 28,
                        },

                },


            }),


        );

    });



    describe('test', () => {
        it('should return the correct data', () => {

          return  axios.get('localhost:1234/test').then(response => {
                expect(response[0].name).toBe('Scherr');
                expect(response[0].surname).toBe('Valerian');
                expect(response[0].age).toBe(28);
            }).then(()=> provider.verify())
        });
    });

    afterAll(() => {
        return provider.finalize();
    });
});

控制台输出:

代码语言:javascript
复制
   Error: getaddrinfo ENOTFOUND 1234
Expected :
Actual   :
<Click to see difference>

error properties: Object({ errno: 'ENOTFOUND', code: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: '1234', config: Object({ url: 'localhost:1234/test', method: 'get', headers: Object({ Accept: 'application/json, text/plain, */*', User-Agent: 'axios/0.19.2' }), transformRequest: [ Function ], transformResponse: [ Function ], timeout: 0, adapter: Function, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, validateStatus: Function, data: undefined }), request: Writable({ _writableState: WritableState({ objectMode: false, highWaterMark: 16384, finalCalled: false, needDrain: false, ending: false, ended: false, finished: false, destroyed: false, decodeStrings: true, defaultEncoding: 'utf8', length: 0, writing: false, corked: 0, sync: true, bufferProcessing: false, onwrite: Function, writecb: null, writelen: 0, afterWriteTickInfo: null, bufferedRequest: null, lastBufferedRequest: null, pendingcb: 0, prefinished: false, errorEmitted: false, emitClose: true, autoDestroy: false ...
Error: getaddrinfo ENOTFOUND 1234
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26)

package.json:

代码语言:javascript
复制
{
  "name": "webservice",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "jasmine"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@pact-foundation/pact": "^9.11.0",
    "@pact-foundation/pact-node": "^10.9.5",
    "axios": "^0.19.2",
    "jasmine": "^3.5.0"
  },
  "devDependencies": {
    "pact": "^4.3.2"
  }
}

我非常感谢您的帮助和事先的感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-08 23:27:54

这里没有日志我无法判断,但有一件事是肯定的:您对axios.getprovider.verify的调用是承诺的,而且是不正确的,这意味着某些事情的执行将不正常,或者根本不会执行。

简单地用return作为前缀应该可以解决这个问题。

https://github.com/pact-foundation/pact-js#test-fails-when-it-should-pass

票数 0
EN

Stack Overflow用户

发布于 2022-02-02 23:25:45

我也有过类似的问题。将provider config上的provider config属性设置为true完成了我的工作。

在使用node-fetch而不是axios时,我似乎没有这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62259129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档