mis*_*mas 2 javascript cypress
如何使用js文件作为fixture?有这方面的例子吗?我在 user-details.js 中尝试过:
data = {
email: function () {
const currentTimestamp = new Date().getTime();
return `test${currentTimestamp}@test.com`
},
firstName: 'Max',
lastName: 'Mustermann',
street: 'Some Street',
}
Run Code Online (Sandbox Code Playgroud)
然后在我的规范文件中我这样做:
beforeEach(function () {
cy.fixture(env + '/user-details').as('userDetails');
});
Run Code Online (Sandbox Code Playgroud)
在it同一规范文件的测试块中:
const userDetails = this.userDetails.data;
actions.insertStreet(userDetails.street);
Run Code Online (Sandbox Code Playgroud)
但它说它无法读取未定义的属性“street”。有什么想法如何正确地做到这一点吗?:汗水微笑:
我有同样的问题,并且无法将接受的答案与我所看到的情况(在 Cypress 9.2.1 中)完全一致。
事实证明,当一个.js文件作为固定装置给出时,cypresseval()会保存该文件的内容(实际上,它使用eval-with-parentheses),并使用由此产生的任何对象。因此,有可能有一个 file user-details.js,其中好像
[{name: "Bob", age: 30 + 5}]
Run Code Online (Sandbox Code Playgroud)
甚至执行一些“真实”代码:
["Bob", "Rob", "Job"].map((name, index) => ({user: name, age: 20 + index}))
Run Code Online (Sandbox Code Playgroud)
或者
(() => {
const users = ....
return users
})()
Run Code Online (Sandbox Code Playgroud)
应该注意的是,它并不像您想要的那么灵活(例如,您不能导入代码、执行异步操作等),但它比没有更重要。
问题是,你是否应该......
老实说,我认为这是一个很好的方法,可以让你的灯具更具人类可读性,能够添加注释和轻松转换。而且您不会被 JSON 的逗号限制所困扰,例如
[
// have a single user, because blah blah
{name: "Bob", date_of_birth: new Date(1979, 5, 3).valueOf() / 1000},
]
Run Code Online (Sandbox Code Playgroud)
(Date(1979, 5, 3)比某些 unix 时间戳更易于人类阅读(尽管它意味着 6 月 5 日,而不是 5 月 5 日......))
我完全认为.js夹具是做到这一点的好方法(如果它只是将夹具导入为模块并使用默认导出作为项目或其他东西,那就更高兴了,但eval可以接受......),只要因为你生产的东西是恒定的!如果你想要一些动态的东西(或者,可能是一些需要更复杂的东西),那么你最好使用 @seth-lutske 的建议(这意味着在你的情况下,接受的答案就是你所需要的,但是我想记录一下.js固定装置是如何工作的,以防其他人过来)。
说了这么多,为什么 cypress 在这里使用 an 是值得怀疑的eval(),尽管建议的方法是使用window.Function(); 另外,我想知道您是否想冒这样的风险:其他一些开发人员(包括未来的您)决定构建一个从某些外部网站下载您的装置的系统,这意味着您创建了一个很好的安全漏洞....
阅读有关 Javascript 装置的github 问题非常有用(我希望在我自己深入研究这一切之前我已经阅读过);如果您正在寻找一个好的解决方法,请参阅此和此评论。
作为所提问题的具体答案,问题是
[{name: "Bob", age: 30 + 5}]
Run Code Online (Sandbox Code Playgroud)
将准确返回该对象,该对象应该可以在 上访问this.userDetails。因此this.userDetails.data指向该对象中的数据字段,即undefined.
以下内容将起作用:
用户详细信息.js:
["Bob", "Rob", "Job"].map((name, index) => ({user: name, age: 20 + index}))
Run Code Online (Sandbox Code Playgroud)
(或者,如果您想email成为字符串而不是函数:
(() => {
const users = ....
return users
})()
Run Code Online (Sandbox Code Playgroud)
)
| 归档时间: |
|
| 查看次数: |
3237 次 |
| 最近记录: |