Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在cypress.io中的动态文件上运行测试_Javascript_Angularjs_Testing_Mocha.js_Cypress - Fatal编程技术网

Javascript 在cypress.io中的动态文件上运行测试

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": [

我试图用它来测试一个我已经构建的大型angular应用程序。我的要求是将一个期望文件加载到测试中,然后将测试从该期望文件中删除

到目前为止,我无法使用
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可以等待它

这个模式很复杂,当然不适合您描述的动态测试场景

  • 假设expectation.json文件中有以下数据。
  • 然后,您的代码将是这样的,以便动态创建测试用例

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