在使用Protractor运行测试后,我一直在寻找合适的方法来“清理”创建的记录。
作为一个例子,我有一个测试套件,目前在创建和更新屏幕上运行测试,但目前没有删除功能,但是我可以点击后端API的删除终点。
所以我采取的方法是记录创建记录的id,以便在afterAll中我可以发出请求以对记录执行删除操作。
例如:
beforeAll(function() {
loginView.login();
page.customerNav.click();
page.customerAddBtn.click();
page.createCustomer();
});
afterAll(function() {
helper.buildRequestOptions('DELETE', 'customers/'+createdCustomerId).then(function(options){
request(options, function(err, response){
if(response.statusCode === 200) {
console.log('Successfully deleted customer ID: '+ createdCustomerId);
loginView.logout();
} else {
console.log('A problem occurred when attempting to delete customer ID: '+ createdCustomerId);
console.log('status code - ' + response.statusCode);
console.log(err);
}
});
});
});
//it statements below...
虽然这有效,但我不确定这是好的还是坏的方法,如果是后者,还有什么选择。
我这样做是为了防止随着时间的推移添加一大堆虚拟测试记录。我知道你可以在测试运行之间清理数据库,例如通过一个脚本或类似的CI服务器,但它不是我/我们进一步研究的东西。此外,这种方法看起来更简单,但我再次不确定这种方法在测试规范文件中的实用性。
那里的任何人都可以提供进一步的评论\解决方案吗?
由于
答案 0 :(得分:3)
嗯,对于它的价值,我基本上使用完全相同的方法。我们有一个端点,可以根据ID重置特定用户的数据,我也会在beforeAll()
块中点击它,然后在每次运行之前将数据重置为预期状态(我可以在完成所有操作之后完成它) ,但有时人们搞乱测试帐户所以我以前做的所有)所以我只需获取用户ID并发送http请求。
我无法真正说出它的实用性,因为它只是我完成的一项任务,它对我来说非常有效,所以我认为没有必要替代它。只是想让你知道你并不孤单:)
我很好奇其他人是否有其他解决方案。
答案 1 :(得分:1)
更强大的解决方案是使用$httpBackend模拟您的服务器,这样您就不必对API进行实际调用。
然后,您可以根据e2e测试规范配置服务器响应。
这是一个虚假的服务器示例:
angular.module('myModule')
.config(function($provide,$logProvider) {
$logProvider.debugEnabled(true);
})
.run(function($httpBackend,$log) {
var request = new RegExp('\/api\/route\\?some_query_param=([^&]*)');
$httpBackend.whenGET(request).respond(function(method, url, data) {
$log.debug(url);
// see http://stackoverflow.com/questions/24542465/angularjs-how-uri-components-are-encoded/29728653#29728653
function decode_param(param) {
return decodeURIComponent(param.
replace('@', '%40').
replace(':', '%3A').
replace('$', '%24').
replace(',', '%2C').
replace(';', '%3B').
replace('+', '%20'));
}
var params = url.match(request);
var some_query_param = decodeURIComponent(params[1]);
return [200,
{
someResponse...
}, {}];
});
});
然后在测试环境中加载此脚本并完成。