问题:通过契约进行的消费者驱动的合同测试

问题描述 投票:0回答:1

我正在为大学项目编写一个小型程序。我想用契约框架来测试它。不幸的是,尽管没有错误,但没有为我创建Pact.json文件。我的消费者用Java语言编写。在下面,您可以看到我的javascript文件,控制台输出和我的package.json文件的源代码:

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',
        port: 1234,
        log: path.resolve(process.cwd(), 'logs', 'pact.log'),
        dir: path.resolve(process.cwd(), 'pacts'),
        logLevel: 'INFO',
    });

    beforeEach(() => 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', () => {

      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);
    })


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

控制台输出:

    "C:\Program Files\nodejs\node.exe" C:\Users\vsche\IdeaProjects\testscenario\webservice\node_modules\jasmine\bin\jasmine.js --reporter=C:\Users\vsche\.IntelliJIdea2019.3\config\plugins\IdeaJasmine\lib\intellij_reporter.js C:/Users/vsche/IdeaProjects/testscenario/webservice/spec/WebService.spec.js --filter=test
[2020-06-08T09:26:08.982Z]  INFO: [email protected]/4052 on DESKTOP-FH2DU0O: 
    Creating Pact Server with options: 
    {"consumer":"consumer","cors":false,"dir":"C:\\Users\\vsche\\IdeaProjects\\testscenario\\pacts","host":"127.0.0.1","log":"C:\\Users\\vsche\\IdeaProjects\\testscenario\\logs\\pact.log","pactFileWriteMode":"overwrite","port":1234,"provider":"producer","spec":2,"ssl":false}
[2020-06-08T09:26:10.031Z]  INFO: [email protected]/4052 on DESKTOP-FH2DU0O: 
    Setting up Pact with Consumer "consumer" and Provider "producer"
        using mock service on Port: "1234"
[2020-06-08T09:26:10.054Z]  INFO: [email protected]/4052 on DESKTOP-FH2DU0O: Pact File Written
[2020-06-08T09:26:10.054Z]  INFO: [email protected]/4052 on DESKTOP-FH2DU0O: Removing Pact process with PID: 7836
[2020-06-08T09:26:12.157Z]  INFO: [email protected]/4052 on DESKTOP-FH2DU0O: 
    Deleting Pact Server with options: 
    {"consumer":"consumer","cors":false,"dir":"C:\\Users\\vsche\\IdeaProjects\\testscenario\\pacts","host":"127.0.0.1","log":"C:\\Users\\vsche\\IdeaProjects\\testscenario\\logs\\pact.log","pactFileWriteMode":"overwrite","port":1234,"provider":"producer","spec":2,"ssl":false}

package.json:

{
  "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"
  }
}

我非常感谢您的帮助,并在此先致谢

javascript consumer pact contract
1个回答
0
投票

我无法在这里没有日志告诉您,但是有一点可以肯定:您对axios.getprovider.verify的调用是承诺,并且没有正确执行,这意味着某些事情的执行会混乱或无法执行实际上执行。

仅将return加两个前缀即可解决该问题。

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

© www.soinside.com 2019 - 2024. All rights reserved.