我正试图让gau-js与Frisby合作 . 我们使用Frisby在我们的API上运行功能测试作为黑盒测试 . 最近将Frisby升级到版本2.0.8,现在使用Jest . 一切顺利 . 现在我想在顶部添加Gauge-js以添加人类可读的测试规范/场景/步骤 .
我在Windows 8.1机器上测试:
为了使它工作,我添加Frisby作为对gauge-js的依赖 . 现在它部分有效 . 它实际上执行测试步骤,但失败了
ReferenceError: expect is not defined
at incrementAssertionCount (C:\Users\<USER>\AppData\Roaming\gauge\plugins\js\2.0.3\node_modules\frisby\src\frisby\expects.js:14:20)
at FrisbySpec.status (C:\Users\<USER>\AppData\Roaming\gauge\plugins\js\2.0.3\node_modules\frisby\src\frisby\expects.js:23:5)
at FrisbySpec._addExpect.e (C:\Users\<USER>\AppData\Roaming\gauge\plugins\js\2.0.3\node_modules\frisby\src\frisby\spec.js:396:23)
at FrisbySpec._runExpects (C:\Users\<USER>\AppData\Roaming\gauge\plugins\js\2.0.3\node_modules\frisby\src\frisby\spec.js:288:24)
at _fetch.fetch.then.then (C:\Users\<USER>\AppData\Roaming\gauge\plugins\js\2.0.3\node_modules\frisby\src\frisby\spec.js:142:14)
at process._tickCallback (internal/process/next_tick.js:109:7)
这是实际的测试步骤:
/* globals gauge*/
"use strict";
var frisby = require('frisby');
// --------------------------
// Gauge step implementations
// --------------------------
step("Get responds with <state>.", function (state, doneFn) {
frisby
.timeout(1500)
.get('http://localhost:8001/some/get/resource', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic QWERTYASDFEDEFTGHYFVCCFRJgyuku'
}
})
// .expect('status', 200)
// .expect('header', 'Content-Type', 'application/json; charset=utf-8')
// .expect('json', state)
.done(doneFn).catch(error => {
console.log(error);
});
});
当注释掉行未注释时,会发生错误 .
我认为问题实际上与它的负载依赖性有关,但我的js知识有点支离破碎和生疏 . 任何帮助,将不胜感激 .
2 回答
我找到了解决原始问题的更好方法 . 当我开始实现@duyker建议的内容时 . 我注意到(最后)Frisby代码有意忽略对Jasmine的依赖,如果它不存在,但有一个bug . 所以我提交fix for it . 它被接受了 .
现在问题解决了,Frisby可以在没有Jasmine或Jest的情况下工作 .
.expect(...)
函数未定义的原因是frisby期望jasmine是测试运行器,jasmine的expect
函数可供它使用 .所有frisby包括
expect
函数执行以下"incrementAssertionCount" . 因为它无法在if (_.isFunction(expect))
中找到expect
,所以无法提供frisby提供的默认值 .看起来有一个简单的替代方法,即将期望函数从frisby复制到您的代码中并调用
addExpectHandler
方法(更好的是,创建一个可以引用的外部包,这样您就不必将其复制到每个项目中) .一个简单的例子如下所示: