实习生异步测试
Intern Async Test
我正在尝试使用单独的模块进行异步实习生测试来执行请求调用。测试完成后,我遇到了返回 true 的问题,因为即使请求成功并且测试运行完成,我总是收到超时错误。测试运行后,它只是位于最后一页并超时。login_test.js是测试文件,CompanyCreate 是存在于外部模块中的请求调用文件。我不太确定如果我将我的测试返回调用传递给 deferred.callback() 会发生什么。
// login_test.js
define([
'intern!object',
'pages/loginpage',
'runtime/testConfig',
'intern/dojo/node!nconf',
'helpers/companyCreate',
'locators/loginpage',
'locators/companyselectionpage'
], function(registerSuite, LoginPage, conf, nconf, Company) {
var tests = {
name: 'Login test',
'Test': function() {
/* make a call to create a company
* param1: test function to run after we get response with login details
* param2: intern object so we can make it async
*/
Company.createCompany(function(response, testObj) {
testObj.timeout = 120000; //The default timeout is 30 seconds. Not enough
var region = nconf.get("region"); //Getting command line region value
var regionData = conf.get(region); //Fetching config data based on region
var loginId = regionData.LOGIN;
var password = regionData.PASSWORD;
var loginPage = new LoginPage(testObj.remote, regionData.DEFAULT_TIMEOUT);
var companySelectionPage = loginPage
.load(regionData.BASE_URL)
.loginIn(loginId, password);
var homePage = companySelectionPage
.doesCurrentURLContain('/companysel')
.isTitlePresent()
.selectCompany(CompanySelectionLocators.data);
return homePage
.doesCurrentURLContain('/homepage')
.getAccumulatedState();
}, this);
}
};
registerSuite(tests);
});
>
// companyCreate.js
define(function(require) {
var request = require('intern/dojo/request');
var Company = {
createCompany: function(callbackArg, testObj) {
// tell intern this is async
var deferred = testObj.async(120000);
// make post
request.post('https://internal.com/createcompany', {
query: {
version: ".0.1",
special: "true"
},
data: JSON.stringify({
userName: "Test",
password: "pass",
userEmail: "email@hi.com"
}),
headers: {
'Content-Type': "application/json"
}
}).then(function(response) {
// success, tell intern async is done, return test function to run and pass it the response
console.log(response);
return deferred.callback(callbackArg(response, testObj));
}, function(err) {
console.log(err);
}, function(evt) {
//console.log(evt);
});
}
};
return Company;
});
deferred.callback
旨在用于包装在其他时间执行的另一个回调。它不会解析基础 Promise,它会返回一个新函数,在调用该函数时,如果传入的回调函数未引发错误,则会解析 Promise。例如:
'Test': function () {
var dfd = this.async();
// this use of `dfd.callback`…
fs.readFile('foo.txt', dfd.callback(function (error, data) {
if (error) {
throw error;
}
assert.strictEqual(data, 'hello, world');
}));
// …is equivalent to this without it:
fs.readFile('foo.txt', function (error, data) {
if (error) {
dfd.reject(error);
return;
}
try {
assert.strictEqual(data, 'hello, world');
}
catch (error) {
dfd.reject(error);
return;
}
dfd.resolve();
}));
}
您应该使用 deferred.resolve
,它将承诺解析为作为第一个参数传递的值。有关每个函数的更多详细信息,请参阅异步测试文档。
工作解决方案如下。 我不需要这个.async。 comapnyCreate.js 返回来自请求的响应和承诺。login_test.js在履行承诺后运行测试。 (仍然需要一些错误处理逻辑)
// login_test.js
define([
'intern!object',
'pages/loginpage',
'runtime/testConfig',
'intern/dojo/node!nconf',
'helpers/companyCreate',
'locators/loginpage',
'locators/companyselectionpage'
], function(registerSuite, LoginPage, conf, nconf, Company) {
var tests = {
name: 'Login test',
'Test': function() {
this.timeout = 60000;
var remote = this.remote;
return Company.createCompany().then(function(response) {
var region = nconf.get("region"); //Getting command line region value
var regionData = conf.get(region); //Fetching config data based on region
var loginId = regionData.LOGIN;
var password = regionData.PASSWORD;
var loginPage = new LoginPage(remote, regionData.DEFAULT_TIMEOUT);
var companySelectionPage = loginPage
.load(regionData.BASE_URL)
.loginIn(loginId, password);
var homePage = companySelectionPage
.doesCurrentURLContain('/companysel')
.isTitlePresent()
.selectCompany(CompanySelectionLocators.data);
return homePage
.doesCurrentURLContain('/homepage')
.getAccumulatedState();
});
}
};
registerSuite(tests);
});
// companyCreate.js
define(function(require) {
var request = require('intern/dojo/request');
var Company = {
createCompany: function() {
// make post
return request.post('https://internal.com/createcompany', {
query: {
version: ".0.1",
special: "true"
},
data: JSON.stringify({
userName: "Test",
password: "pass",
userEmail: "email@hi.com"
}),
headers: {
'Content-Type': "application/json"
}
});
}
};
return Company;
});
相关文章:
- 用于测试javascript中异步加载的脚本的工具
- 从要使用Protractor测试的服务器异步加载的动态数据列表的列表
- jQuery-有没有一种方法可以测试函数是否异步
- 如何按照承诺使用mocha/chai/chai测试ES7异步函数
- 用mocha测试异步函数
- 如何测试运行 node-fluent-ffmpeg(异步模块)的自定义模块
- 如何在测试异步运行时使用 Sinon 沙箱
- 量角器端到端测试中的异步执行
- 无法在Redux中测试异步操作
- NodeUnit-测试异步函数
- 用mocha测试异步瀑布似乎停滞不前
- 如何使用 express、猫鼬和节点单元测试异步函数
- 使用 Jasmine 测试异步回调
- 连接到数据库的单元测试异步函数
- 如何测试异步回调
- 当使用Mocha/Chai测试异步函数时,与期望值不匹配总是会导致超时
- 任何使用qunit测试异步jquery插件的方法,避免嵌入"start()"并保持异步
- 使用一个小模型来测试异步处理
- Angular 2测试:异步测试的正确方法是什么?
- 在Meteor中使用Jasmine测试异步函数