我想在 Cypress 中發送一個 POST 請求,觸發驗證以拒絕請求
根據 Postman 的說法,回應的正文如下所示:
"code": "validation_error",
"message": "Validation error, please see fields property for details",
"fields":
{
"TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35"
}
我對“欄位”部分感興趣,因此我嘗試使用以下代碼進行斷言:
const api_key = require('../../fixtures/contracts/api_test_client1.json')
const body1 = require('../../fixtures/contracts/body_test_client1.json')
describe('test POST/client validation', () => {
it('send POST/client request', function () {
cy.request({
method: 'POST',
url: Cypress.env('staging_url') '/service/clients',
headers: {
'API-KEY': api_key,
},
body: body1,
failOnStatusCode:false
})
.then(response => {
expect(response.status).to.eq(400)
expect(response.body.fields).to.contain('"TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35"')
})
)}
)}
然而這會導致一個錯誤:
斷言錯誤
測驗的物件必須是一個陣列、一個映射、一個物件、一個集合、一個字串或一個弱集,但是給定的物件
是的,錯誤訊息到此結束。任何想法如何斷言回應包含此訊息?
uj5u.com熱心網友回復:
我認為您只想將預期值顯示為物件,而不是字串
expect(response.body.fields)
.to.contain({
"TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35"
})
例如,如果您查看他們顯示的檔案chaijs API
expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2});
和contain是同義詞include
您也可以嘗試to.deep.equal,因為您似乎指定了 totalfields屬性
expect(response.body.fields)
.to.deep.eq({
"TariffData[rate_gp]": " Invalid rate_gp. Expected: 9.35. Imported: 19.35"
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329443.html
標籤:javascript 邮政 回复 柏
