我正在尝试在测试开始时执行一个函数,然后应该执行其余的测试。
这是我的自定义命令(名为internalAdviceLinksHtml
):
var solr = require('solr-client')
exports.command = function() {
this
var client = solr.createClient('solr.dev.bauerhosting.com', 8080, 'cms', '/www.parkers.co.uk');
var globalSettingsQuery = client.createQuery()
.q({TypeName:'Bauer.Parkers.GlobalSettings'})
.start(0)
.rows(10);
client.search(globalSettingsQuery,function(err,obj) {
if (err) {
console.log(err);
} else {
var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);
console.log(myresult.length);
if (myresult.length === 0) {
console.log('content block not configured');
} else {
console.log('content block configured');
}
}
});
return this;
};
测试文件(脚本):
module.exports = {
'set up the solr query': function (browser) {
browser
.solr_query.global_settings.internalAdviceLinksHtml();
},
'links above footer on advice landing page displayed': function (browser) {
browser
.url(browser.launch_url + browser.globals.carAdvice)
.assert.elementPresent('section.seo-internal-links')
},
'closing the browser': function (browser) {
browser
.browserEnd();
},
};
该函数正常工作(即,如果myresult
长度为0,则显示“未配置内容块”等),但从不调用以下测试(“在显示的建议登录页面上的页脚上方链接”)。
似乎执行在custom-command之后停止。我相信这对某些人来说是非常明显的,但我似乎无法看到它是什么。
任何帮助将不胜感激。
关于你的internalAdviceLinksHtml
定制命令,从我的角度来看,一切看起来都很好(我认为孤独的this
是一个错字)。
你的预感是正确的,似乎Nightwatch测试运行器未能进入下一个测试,这可能是由于一些承诺没有在上游解决(来自client.search
的internalAdviceLinksHtml
功能)。
我建议在输出到控制台(未配置内容块或配置内容块)后立即执行return this
,看看是否能解决问题:
client.search(globalSettingsQuery,function(err,obj) {
if (err) {
console.log(err);
} else {
var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);
console.log(myresult.length);
if (myresult.length === 0) {
console.log('content block not configured');
} else {
console.log('content block configured');
}
}
return this
});
另外,还有一些额外的指示:
before
/ beforeEach
hooks | teardown(例如:browser.end()
)=> after
/ afterEach
hooks);browser.end()
。有关此事的更多信息,请查看this答案。您的测试文件将变为:
module.exports = {
// > do your setup here <
before(browser) {
browser
.solr_query.global_settings.internalAdviceLinksHtml();
},
'links above footer on advice landing page displayed': function (browser) {
browser
.url(browser.launch_url + browser.globals.carAdvice)
.assert.elementPresent('section.seo-internal-links');
},
// > do your cleanup here <
after(browser) {
browser
.browserEnd();
},
};