So, your problem is this line

`Account Accountx = [SELECT ID FROM account];`

and then

`AccountID = AccountX.id,`

Since test code cannot see any data, there are no accounts to assign. Make sure you create an account in your test code, like the sample below.

    @isTest
    private class UserContactTest {
    testmethod static void userCreationTest(){
        Account a = new Account(Name = 'Company Internal');
        insert a;

        User u = new User();
        u.Firstname = 'mike';
        u.LastName = 'Smith';
        u.email = '[email protected]';
        u.Alias = 'alias';
        u.CommunityNickname = 'commnick';
        u.EmailEncodingKey = 'UTF-8';
        u.Username = '[email protected]';
        u.TimeZoneSidKey = 'America/Denver';
        u.LocaleSidKey = 'en_US';
        u.EmailEncodingKey = 'UTF-8';
        u.LanguageLocaleKey = 'en_US';
        u.ProfileId = [SELECT id FROM profile where Name = 'System Administrator'].Id;
     
       insert u;
    }

***However***, that will fix your test failure but won't make your code work. In your trigger, you are making a SoQL query within a loop. That is a big no-no. 

I am going to go ahead and assume that you do not want to get a "usercon" record created for each account in the system. That means a better way to query, and a way of figuring out which account you want to use.

With that, here is a possible example, assuming all users will go to the same account

    public class UserContact {
        @future public static void createUserContact(set<ID> recordIDs){
            list<user> users = [SELECT ID, Firstname, Lastname, email, name, CommunityNickname, TimeZoneSidKey, LocaleSidKey, EmailEncodingKey, ProfileId, LanguageLocaleKey 
                                FROM user
                                WHERE ID in :recordIDs];
    
            String accountName = 'Company Internal'; //This is where you will provide your name (could be any other field)
    
            //In this query you want to "LIMIT 1" to avoid more than 1 record returning
            Account Accountx = [SELECT ID
                                    FROM account
                                   where Name = :accountName
                                   LIMIT 1];
    
            for (user x: users){
                Contact userCon = new contact(
                AccountID = AccountX.id,
                FirstName = x.FirstName,
                LastName = x.LastName,
                email = x.Email);
                insert userCon;
            }
        }
    }

My example is almost trivial. Let me know your use case (i.e.: how do you determine the account to choose) and I can improve my sample code.