我正在为大学项目编写一个小型程序。我想用契约框架来测试它。不幸的是,尽管没有错误,但没有为我创建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"
}
}
我非常感谢您的帮助,并在此先致谢
我无法在这里没有日志告诉您,但是有一点可以肯定:您对axios.get
和provider.verify
的调用是承诺,并且没有正确执行,这意味着某些事情的执行会混乱或无法执行实际上执行。
仅将return
加两个前缀即可解决该问题。
请参见https://github.com/pact-foundation/pact-js#test-fails-when-it-should-pass。