Frisby.js提取addUser/deleteUser复用函数失效问题求助
解决Frisby.js复用add/deleteUser函数失效的问题
你遇到的问题主要源于两个关键错误,咱们一步步拆解修复:
1. 错误的函数传递方式
你在beforeEach和afterEach里写的addUser()和delete()是立即执行函数,而不是把函数本身作为回调传递给测试钩子。Mocha(Frisby基于Mocha)的测试钩子需要接收函数引用,这样它才能在测试周期的正确时机触发这个异步函数。
正确的写法是去掉括号,直接传递函数名:
beforeEach(addUser) // 错误写法:beforeEach(addUser())
2. 保留关键字冲突
delete是JavaScript的保留关键字,不能用来命名变量或函数,这会直接导致语法错误,代码根本无法正常解析。把函数名改成合法的名称,比如deleteUser。
修复后的完整代码
// 修正函数定义,确保作用域内可访问所需变量 const addUser = function(done) { frisby .post(adduser_endpoint, newuser_payload) .expect('status', 200) .done(done) } // 替换保留关键字delete为合法名称deleteUser const deleteUser = function(done) { frisby .del(del_user_endpoint) .expect('status', 200) .done(done) } describe('Successfully change password', function () { // 传递函数引用,而非立即执行 beforeEach(addUser) it('Enter valid Password to set password', function (done) { frisby .post(reset_password_endpoint, change_password_payload) .expect('status', 200) .done(done) }) // 使用修正后的函数名传递引用 afterEach(deleteUser) })
额外优化提示
- 如果需要动态传递用户参数(比如不同测试用例用不同用户数据),可以给复用函数加参数,再用匿名函数包装传递:
const addUser = function(userPayload, done) { frisby .post(adduser_endpoint, userPayload) .expect('status', 200) .done(done) } // 在测试钩子中包装传参 beforeEach(function(done) { addUser(customUserPayload, done) }) - 如果删除用户需要用到创建后的用户ID,可以把用户信息存在测试上下文里(注意不要用箭头函数,箭头函数没有独立的
this):const addUser = function(done) { frisby .post(adduser_endpoint, newuser_payload) .expect('status', 200) .then((res) => { // 假设响应返回用户ID this.createdUserId = res.json.id }) .done(done) } const deleteUser = function(done) { frisby .del(`${del_user_endpoint}/${this.createdUserId}`) .expect('status', 200) .done(done) }
内容的提问来源于stack exchange,提问作者user1555608
相关产品推荐
相关产品推荐

