javascript - 使用赛普拉斯从单独的文件动态调用测试
问题描述
我的目标是解析一些 json 文件,该文件确定应该从另一个文件中包含的更大的测试列表中运行哪一组特定的“it”测试。下面是我思考过程的一个例子。
这个问题背后的上下文是 json 文件包含有关给定用户角色(客户端、管理员、所有者等)可以访问的页面的哪些部分的信息,我只想在页面的部分运行测试用户可以访问多个文件,例如allTestsForPage.js
网站上的每个页面。
从我的测试中,我可以运行函数,但不能运行其中的“it”测试。我不确定这是否是正确的思路,或者是否有更好的替代方案来解决这个问题。
// spec.js
describe("run tests dynamically", () => {
let methods = require('allTestsForPage.js')
before(() => {
cy.visit('/') // visit homepage
cy.fixture('rawData.json').as('data') // get json data
cy.get('@data').then((data) => {
// parse json data into list of tests to run
// Ex: listOfTests = ['a', 'c']
listOfTests.forEach((test) => {
methods[test]() // runs the 'it' tests within a() and c() from allTestsForPage.js
}
}
}
}
// allTestsForPage.js
function a(){
it('should load page', () => {
// do some test
}
}
function b(){
it('click an add button', () => {
// do some test
}
}
function c(){
it('click a remove button', () => {
// do some test
}
}
module.exports = {
a:a,
b:b,
c:c
}
解决方案
您(很可能)无法根据data
从
cy.fixture('rawData.json') // don't need to alias the fixture
.then((data) => {
因为那使用了一个异步命令。当规范运行时,它需要确切地知道将调用多少个it()
.
您可以动态skip
测试,请参阅如何在赛普拉斯中添加测试用例分组。
如果您不使用赛普拉斯获取数据文件,您的方法可能会奏效,
const raw = require('./fixtures/rawData.json')
const data = JSON.parse(raw)
推荐阅读
- node.js - 我该如何解决这个错误 - npm start - npm ERR!缺少脚本:开始
- reactjs - 如何根据返回值更改 window.location.href?
- django - 是否有支持 REST API 的 django-avatar 应用程序?
- list - tkinter 中的嵌套帧
- c - 为什么我的 C 程序会跳过 if 语句?
- android - 奖励广告未加载
- flutter - Masked Blur for Image
- reactjs - 使用 Typescript 和 i18next 使用 Jest 测试日期对象
- javascript - 使用 jQuery 将 div 移动到另一个 div 中 - 重复序列
- design-patterns - 通过单个对象管理多个类