带有 Cypress 和 Mocha 的模板字符串
Template strings with Cypress and Mocha
我正在使用 cypress 和 Mocha。
我想用 mocha 做一些模板,这样我就可以 运行 使用不同的数据集进行相同的测试。但是由于某些原因,模板字符串无法与 Cypress 和 Mocha 结合使用。
这是我的:
import { CheckoutActions } from '../support/actions/common/checkout-actions';
import { CheckoutActionsCats } from '../support/actions/cats/checkout-actions';
export interface VoucherTestData {
ctx: string;
checkoutActions: CheckoutActions;
}
let dataSet: VoucherTestData[] = [
{
ctx: ' cats',
checkoutActions: new CheckoutActionsCats(),
},
];
dataSet.forEach(function (data) {
context(`${data.ctx}`, function () {
console.log('Context data.ctx');
console.log(data.ctx); // Prints cats
if (data.ctx === 'cats') {
console.log('Data is cats');
} else {
console.log('Data failed'); // This is printed. Why?
}
const env = Cypress.env('dataEnv');
beforeEach(function () {
console.log('beforeEach data.ctx');
console.log(data.ctx); // Prints cats
cy.fixture(env + '/users').as('users'); // users is a JSON file
cy.fixture(env + '/products').as('products'); // products is a JSON file
cy.fixture(env + '/vouchers').as('vouchers'); // vouchers is a JSON file
});
describe('My suite', function () {
beforeEach(function () {
console.log('Suite');
console.log(`${data.ctx}`); // Prints cats
this.url = Cypress.env(`${data.ctx}Baseurl`); // This is undefined. If I use Cypress.env('cats'); then it works
this.product = this.products[`${data.ctx}`]; // This is undefined. If I put this.products['cats'] than it is ok
this.testVoucher = this.vouchers[`${data.ctx}`].voucher; // Error "Cannot read property 'voucher' of undefined".
// If i put this.vouchers['cats'].voucher than it is ok
});
it('should do something', function () {
cy.log(this.url); // Prints undefined. Why?
cy.log(data.ctx); // Prints cats
cy.log(this.product.standardProduct);
cy.log(this.testVoucher.CHF15.threshold);
});
});
});
});
有人可以解释为什么在与 cypress 结合使用时这不起作用吗?变量 data.ctx 显然在那里,但是当使用 template/interpolating 字符串时,事情就停止了。
这让我很困惑。
请帮助:)
您有一个 错别字 - 首字母 data.ctx 中的前导 space。
两者都
if (data.ctx.trim() === 'cats')
或者去掉 space(你为什么需要它?)
我正在使用 cypress 和 Mocha。
我想用 mocha 做一些模板,这样我就可以 运行 使用不同的数据集进行相同的测试。但是由于某些原因,模板字符串无法与 Cypress 和 Mocha 结合使用。
这是我的:
import { CheckoutActions } from '../support/actions/common/checkout-actions';
import { CheckoutActionsCats } from '../support/actions/cats/checkout-actions';
export interface VoucherTestData {
ctx: string;
checkoutActions: CheckoutActions;
}
let dataSet: VoucherTestData[] = [
{
ctx: ' cats',
checkoutActions: new CheckoutActionsCats(),
},
];
dataSet.forEach(function (data) {
context(`${data.ctx}`, function () {
console.log('Context data.ctx');
console.log(data.ctx); // Prints cats
if (data.ctx === 'cats') {
console.log('Data is cats');
} else {
console.log('Data failed'); // This is printed. Why?
}
const env = Cypress.env('dataEnv');
beforeEach(function () {
console.log('beforeEach data.ctx');
console.log(data.ctx); // Prints cats
cy.fixture(env + '/users').as('users'); // users is a JSON file
cy.fixture(env + '/products').as('products'); // products is a JSON file
cy.fixture(env + '/vouchers').as('vouchers'); // vouchers is a JSON file
});
describe('My suite', function () {
beforeEach(function () {
console.log('Suite');
console.log(`${data.ctx}`); // Prints cats
this.url = Cypress.env(`${data.ctx}Baseurl`); // This is undefined. If I use Cypress.env('cats'); then it works
this.product = this.products[`${data.ctx}`]; // This is undefined. If I put this.products['cats'] than it is ok
this.testVoucher = this.vouchers[`${data.ctx}`].voucher; // Error "Cannot read property 'voucher' of undefined".
// If i put this.vouchers['cats'].voucher than it is ok
});
it('should do something', function () {
cy.log(this.url); // Prints undefined. Why?
cy.log(data.ctx); // Prints cats
cy.log(this.product.standardProduct);
cy.log(this.testVoucher.CHF15.threshold);
});
});
});
});
有人可以解释为什么在与 cypress 结合使用时这不起作用吗?变量 data.ctx 显然在那里,但是当使用 template/interpolating 字符串时,事情就停止了。 这让我很困惑。 请帮助:)
您有一个 错别字 - 首字母 data.ctx 中的前导 space。
两者都
if (data.ctx.trim() === 'cats')
或者去掉 space(你为什么需要它?)