Javascript 在cypress.io中的动态文件上运行测试
我试图用它来测试一个我已经构建的大型angular应用程序。我的要求是将一个期望文件加载到测试中,然后将测试从该期望文件中删除 到目前为止,我无法使用Javascript 在cypress.io中的动态文件上运行测试,javascript,angularjs,testing,mocha.js,cypress,Javascript,Angularjs,Testing,Mocha.js,Cypress,我试图用它来测试一个我已经构建的大型angular应用程序。我的要求是将一个期望文件加载到测试中,然后将测试从该期望文件中删除 到目前为止,我无法使用cy.readFile(),cy.fixture(),甚至axios通过http加载文件的各种组合来实现这一点 问题似乎是我不能在it()之外使用这些方法,如果我不能这样做,那就意味着我不能通过循环数据来创建its。我正在尝试做下面的事情。。。这在柏树中可能吗?我错过了什么明显的东西吗 假设我的期望是这样的: { "mainPage": [
cy.readFile()
,cy.fixture()
,甚至axios
通过http加载文件的各种组合来实现这一点
问题似乎是我不能在it()
之外使用这些方法,如果我不能这样做,那就意味着我不能通过循环数据来创建its。我正在尝试做下面的事情。。。这在柏树中可能吗?我错过了什么明显的东西吗
假设我的期望是这样的:
{
"mainPage": [1, 2, 3],
"otherPage": [4, 5, 6]
}
我希望我的代码加载它并浏览各个页面:
describe(`Test the app `, function() {
cy.readFile("path/to/expectation.json").then(function(expectation) {
Object.keys(expectation).forEach(function(pageName) {
it(`for page ${pageName}`, function() {
gotoPage(pageName);
var pageData = getDataFrompage();
expect(pageData).to.equal(expectation[pageName]);
})
})
})
})
在我看来,这似乎是一个非常明显的用例,所以我不明白为什么它看起来如此困难:)我有一个类似的要求,除了我正在读取一个应用程序配置文件(位于app assets文件夹中) 我读的时候带着一个
require
,就像这样
const runtimeConfig=require('../../../src/data/my-config');
这很好,然后我可以根据文件内容继续进行测试
所以,你的代码应该是这样的
const expection=require('path/to/expection.json');
描述(`testtheapp`,function()){
Object.keys(期望值).forEach(函数(pageName){
它(`for page${pageName}`,function(){
gotoPage(页面名称);
var pageData=getDataFrompage();
expect(pageData).to.equal(expection[pageName]);
})
})
})
readFile() 尝试
cy.readFile()
,您会收到此错误消息
未捕获错误:无法在正在运行的测试外部调用“cy.readFile()”
您可以通过在之前将读取的内容包装为来停止此错误,如下所示
let runtimeConfig;
在(函数()之前){
cy.readFile('./src/data/my config.json')。然后(fileContents=>{
runtimeConfig=fileContents;
})
})
但不幸的是,Cypress在继续测试之前并没有等待读取完成
夹具() 我还尝试了example.spec.js中显示的fixture模式
context('Files',function()){
beforeach(函数(){
参观https://example.cypress.io/commands/files')
})
它('cy.fixture()-加载一个fixture',函数(){
//您可以使用
//将响应连接到fixture文件
//位于fixtures文件夹中。
cy.server()
// https://on.cypress.io/fixture
cy.fixture('example.json')。as('comment'))
cy.route(/comments/,'@comment').as('getComment'))
//我们有一个代码,当
//在scripts.js中单击该按钮
cy.get('.fixture btn')。单击()
cy.wait(“@getComment”).its('responseBody')
.should('have.property','name')
.和('包括','使用装置表示数据')
但即使将其复制到/cypress/fixtures
文件夹中,也无法使其与我的配置文件一起工作
而且,这感觉相当粗糙-如果我正确理解了这段代码,它将读取的文件转换为伪路由导航,以便Cypress可以等待它
这个模式很复杂,当然不适合您描述的动态测试场景
const data = require("path/to/expectation.json");
describe('Test the app', function() {
Object.keys(data).forEach(function(page, i){
it(`Test Case For: ${page}`, function() {
cy.log(data[page])
})
})
})
谢谢你的物品。钥匙:D
const data = require("path/to/expectation.json");
describe('Test the app', function() {
Object.keys(data).forEach(function(page, i){
it(`Test Case For: ${page}`, function() {
cy.log(data[page])
})
})
})